leetcode253.会议室 II
程序员文章站
2022-06-03 09:57:17
...
1.题目描述
给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],...] (si < ei),为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排。
示例 1:
输入: [[0, 30],[5, 10],[15, 20]]
输出: 2
示例 2:输入: [[7,10],[2,4]]
输出: 1
2.解题思路
分别保存起始时间和结束时间,然后各自排个序,定义结果变量 res 和结束时间指针 j,然后开始遍历,如果当前起始时间小于结束时间指针的时间,则结果自增1,反之结束时间指针自增1,这样可以找出重叠的时间段,从而安排新的会议室
每遇到一个会议安排A,A的开始时间要与已有会议室的最早结束时间比较。如果A的开始时间 大于等于 已有会议室的最早结束时间时无需新增会议室。因为到时后,这个会议室一定是空的。
参考:https://leetcode-cn.com/problems/meeting-rooms-ii/solution/hui-yi-shi-ii-by-leetcode/
3.代码实现
class Solution(object):
def minMeetingRooms(self, intervals):
"""
:type intervals: List[List[int]]
:rtype: int
"""
if not intervals:
return 0
used_rooms = 0
start_timings = sorted([i[0] for i in intervals])
end_timings = sorted(i[1] for i in intervals)
L = len(intervals)
j = 0
for i in range(L):
if start_timings[i] < end_timings[j]:
used_rooms+=1
else:
j+=1
return used_rooms
附上另一种解题方法,C++版本
class Solution {
public:
int minMeetingRooms(vector<vector<int>>& intervals) {
map<int, int> m;
for(auto& v: intervals) m[v[0]]++, m[v[1]]--;
int ans = 0, res = 0;
# 按照key值从小到大排序,如果相同,则value值小的排在前面
# 例如(10,-1) 放在 (10,1)前面
for(auto& it: m) {
ans += it.second;
res = max(res, ans);
}
return res;
}
};
作者:trsteel
链接:https://leetcode-cn.com/problems/meeting-rooms-ii/solution/xian-duan-shu-qu-jian-geng-xin-dan-dian-qiu-zhi-by/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
推荐阅读
-
索尼Xperia 1 II/10 II欧洲售价公布:春季上市
-
#leetcode刷题之路45-跳跃游戏 II
-
硬盘各种接口IDE、SATA与SATA II的优缺点分析
-
全球最轻14英寸笔记本!华硕灵珑II开卖:9999元
-
金邦发布EVO X II系列内存:专为AMD三代锐龙优化
-
惠普暗影精灵II代Pro内部做工怎么样?惠普暗影精灵II代Pro拆机详细评测图解
-
巨兽重生:酷冷至尊发布Cosmos II 25周年版机箱:双飞翼
-
【LeetCode】Two Sum & Two Sum II - Input array is sorted & Two Sum IV - Input is a BST
-
LeetCode454题四数相加 II
-
惠普暗影精灵II代Plus升级版值得买吗?暗影精灵II代Plus升级版全面深度评测