个人练习-Leetcode-1942. The Number of the Smallest Unoccupied Chair
题目链接: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相关推荐
- LeetCode:Largest Number - 求整型数组中各元素可拼合成的最大数字
2019独角兽企业重金招聘Python工程师标准>>> 1.题目名称 Largest Number(求整型数组中各元素可拼合成的最大数字) 2.题目地址 https://leetco ...
- 【整数转字符串】LeetCode 9. Palindrome Number
LeetCode 9. Palindrome Number Solution1: 不利用字符串 class Solution { public:bool isPalindrome(int x) {if ...
- 【To Do! 重点 正则表达式】LeetCode 65. Valid Number
LeetCode 65. Valid Number 本博客转载自:[1]http://www.cnblogs.com/yuzhangcmu/p/4060348.html [2]https://blog ...
- 【回文串2】LeetCode 9. Palindrome Number
LeetCode 9. Palindrome Number Solution1:我的答案 思路一:转化为字符串 class Solution { public:bool isPalindrome(in ...
- 【?异或】LeetCode 260. Single Number III
LeetCode 260. Single Number III Solution1: 博客转载自:http://www.cnblogs.com/grandyang/p/4741122.html 这道题 ...
- 【异或】LeetCode 137. Single Number II
LeetCode 137. Single Number II Solution1:不会做,抄的 博客转载自:http://www.cnblogs.com/grandyang/p/4263927.htm ...
- 【异或】LeetCode 136. Single Number
LeetCode 136. Single Number Solution1:我的答案 还好异或的性质没记错,还好,还好 class Solution { public:int singleNumber ...
- [LeetCode]179. Largest Number
[LeetCode]179. Largest Number 题目描述 解题思路 求最大的数,在数组中对于每一位数字数值越大应当越靠前,如:9 > 5,所以9应该在5之前 需要考虑的是对于不同位数 ...
- LeetCode 871. Minimum Number of Refueling Stops 最少加油次数
LeetCode 871. Minimum Number of Refueling Stops 本题是LeetCode 871题,最少加油次数. 题目描述 A car travels from a s ...
最新文章
- 没错,老板让我写个 BUG!
- 40 个 SpringBoot 常用的注解,你知道几个?
- CSS display: table-cell 用于水平垂直居中
- [Jarvis OJ - PWN]——Backdoor
- csadcascascsacsa
- 斯坦福大学机器学习——高斯判别分析
- 如何将 Mac 恢复还原到以前的日期
- 庆祝本人在cnblogs排名进入前2000!
- 难道千元机的品质真的不如旗舰机吗?
- navicat for mysql 10.0.11简体中文破解版 绿色版
- 展讯SC8810平台虚拟机分析在QEMU中模拟运行
- 方差分析基本介绍以及MATLAB实现
- 从技术新趋势到云原生应用开发,云计算下一个十年将走向何方
- cython使用说明
- 修改注册表来解决Microsoft Office中word和excel表格打开新文件时前面最小化的文件重新弹出显示的问题
- matlab中使用ode方法解范德波尔微分方程的数值解
- NDK at ...Android\Sdk\ndk\21.1.6528147 did not have a source.properties file
- 【181029】FreeEIM 飞鸽传书仿QQ即时通讯软件VC++源代码
- docker 安装jaeger
- 【P2629】好消息,坏消息(前缀和+单调队列优化DP)
热门文章
- 计算机专业转行做英语老师,做了三年英语老师后,我想转行了
- 一些转换器的用法和注意事项(四)——颜色设置相关的转换器
- python字典的长度怎么计算_关于如何知道python对象的字节大小,如数组和字典?:如何知道python对象的字节大小,如数组和字典? – 简单的方法...
- MODBUS PLUS测试软件,Modbus Plus
- 考试能用计算机,cpa的考试能带计算器吗?
- 用canvas实现刮刮卡特效
- 男人必看之领带的10种打法(附图)
- c语言期末考试排序成绩,C语言期末考试总结,看完保你过
- Chief Ray and Margin Ray and Principle Ray(主光线和边缘光线)
- 目标检测:FasterRCNN,RFCN和Light-RCNN的对比分析