题目链接:https://leetcode.cn/problems/the-number-of-the-smallest-unoccupied-chair/

题目大意:给出一群人到达一个排队的时间和离开派对的时间[arr, lev]。有无数个座位,下标从0开始。当一个人在tm时刻离开时,如果一个人在tm及其以后的时刻到达,那么他可以坐离开的人的座位。每个人会优先挑选下标最小的座位。给出一个targetFriend,求这个人坐到的座位号。【题目保证每个人到达的时间是不同的】

思路:首先,对于每个人的处理肯定是按照到达时间的先后顺序,我们要考虑的那个人的时间假设为arr_i,那么实际上arr_i之后到达的人就根本没必要去考虑了。因此,先把arr_i以及之前到达的人找出来,再按照时间顺序排序。

        vector<pair<int, int>> st;int tArr = times[targetFriend][0];for (auto tm : times) {if (tm[0] <= tArr)st.push_back(make_pair(tm[0], tm[1]));}

随后,对这群需要处理的人遍历即可。(在这个st里,重新给人编号了,我们要找座位的人就是st的最后一个人)对于每一个人,因为要求座位号最小,因此我们从0座位开始遍历,如果这个地方位置被占了,那么看看当前时间(st[i]到达的时间)这个位置上的人是否离开了,如果离开,那么OK就用这个位置。如果这个地方位置没被占,那也OK就用这个位置。

其中occ[]记录该位置上坐的上一个人,如果是-1表示还没有被坐过。

        for (int i = 0; i < st.size(); i++) {int pos = 0;int now = st[i].first;while (occ[pos] != -1) {if (now >= st[occ[pos]].second) {break;}pos++;}occ[pos] = i;if (i == st.size()-1)ret = pos;}

记录最后一个人(我们的目标)坐的座位,返回即可。

完整代码:

bool cmp(pair<int, int> x, pair<int, int> y) {return x.first < y.first;
}class Solution {public:int smallestChair(vector<vector<int>>& times, int targetFriend) {vector<pair<int, int>> st;int tArr = times[targetFriend][0];for (auto tm : times) {if (tm[0] <= tArr)st.push_back(make_pair(tm[0], tm[1]));}int occ[100001];memset(occ, -1, sizeof(occ));sort(st.begin(), st.end(), cmp);int ret = -1;for (int i = 0; i < st.size(); i++) {int pos = 0;int now = st[i].first;while (occ[pos] != -1) {if (now >= st[occ[pos]].second) {break;}pos++;}occ[pos] = i;if (i == st.size()-1)ret = pos;}return ret;}
};

个人练习-Leetcode-1942. The Number of the Smallest Unoccupied Chair相关推荐

  1. LeetCode:Largest Number - 求整型数组中各元素可拼合成的最大数字

    2019独角兽企业重金招聘Python工程师标准>>> 1.题目名称 Largest Number(求整型数组中各元素可拼合成的最大数字) 2.题目地址 https://leetco ...

  2. 【整数转字符串】LeetCode 9. Palindrome Number

    LeetCode 9. Palindrome Number Solution1: 不利用字符串 class Solution { public:bool isPalindrome(int x) {if ...

  3. 【To Do! 重点 正则表达式】LeetCode 65. Valid Number

    LeetCode 65. Valid Number 本博客转载自:[1]http://www.cnblogs.com/yuzhangcmu/p/4060348.html [2]https://blog ...

  4. 【回文串2】LeetCode 9. Palindrome Number

    LeetCode 9. Palindrome Number Solution1:我的答案 思路一:转化为字符串 class Solution { public:bool isPalindrome(in ...

  5. 【?异或】LeetCode 260. Single Number III

    LeetCode 260. Single Number III Solution1: 博客转载自:http://www.cnblogs.com/grandyang/p/4741122.html 这道题 ...

  6. 【异或】LeetCode 137. Single Number II

    LeetCode 137. Single Number II Solution1:不会做,抄的 博客转载自:http://www.cnblogs.com/grandyang/p/4263927.htm ...

  7. 【异或】LeetCode 136. Single Number

    LeetCode 136. Single Number Solution1:我的答案 还好异或的性质没记错,还好,还好 class Solution { public:int singleNumber ...

  8. [LeetCode]179. Largest Number

    [LeetCode]179. Largest Number 题目描述 解题思路 求最大的数,在数组中对于每一位数字数值越大应当越靠前,如:9 > 5,所以9应该在5之前 需要考虑的是对于不同位数 ...

  9. LeetCode 871. Minimum Number of Refueling Stops 最少加油次数

    LeetCode 871. Minimum Number of Refueling Stops 本题是LeetCode 871题,最少加油次数. 题目描述 A car travels from a s ...

最新文章

  1. 没错,老板让我写个 BUG!
  2. 40 个 SpringBoot 常用的注解,你知道几个?
  3. CSS display: table-cell 用于水平垂直居中
  4. [Jarvis OJ - PWN]——Backdoor
  5. csadcascascsacsa
  6. 斯坦福大学机器学习——高斯判别分析
  7. 如何将 Mac 恢复还原到以前的日期
  8. 庆祝本人在cnblogs排名进入前2000!
  9. 难道千元机的品质真的不如旗舰机吗?
  10. navicat for mysql 10.0.11简体中文破解版 绿色版
  11. 展讯SC8810平台虚拟机分析在QEMU中模拟运行
  12. 方差分析基本介绍以及MATLAB实现
  13. 从技术新趋势到云原生应用开发,云计算下一个十年将走向何方
  14. cython使用说明
  15. 修改注册表来解决Microsoft Office中word和excel表格打开新文件时前面最小化的文件重新弹出显示的问题
  16. matlab中使用ode方法解范德波尔微分方程的数值解
  17. NDK at ...Android\Sdk\ndk\21.1.6528147 did not have a source.properties file
  18. 【181029】FreeEIM 飞鸽传书仿QQ即时通讯软件VC++源代码
  19. docker 安装jaeger
  20. 【P2629】好消息,坏消息(前缀和+单调队列优化DP)

热门文章

  1. 计算机专业转行做英语老师,做了三年英语老师后,我想转行了
  2. 一些转换器的用法和注意事项(四)——颜色设置相关的转换器
  3. python字典的长度怎么计算_关于如何知道python对象的字节大小,如数组和字典?:如何知道python对象的字节大小,如数组和字典? – 简单的方法...
  4. MODBUS PLUS测试软件,Modbus Plus
  5. 考试能用计算机,cpa的考试能带计算器吗?
  6. 用canvas实现刮刮卡特效
  7. 男人必看之领带的10种打法(附图)
  8. c语言期末考试排序成绩,C语言期末考试总结,看完保你过
  9. Chief Ray and Margin Ray and Principle Ray(主光线和边缘光线)
  10. 目标检测:FasterRCNN,RFCN和Light-RCNN的对比分析