253. 会议室 II #
链接 #
题目 #
给你一个会议时间安排的数组 intervals
,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi]
,返回 所需会议室的最小数量 。
示例 1:
输入:intervals = [[0,30],[5,10],[15,20]] 输出:2
示例 2:
输入:intervals = [[7,10],[2,4]] 输出:1
提示:
1 <= intervals.length <= 104
0 <= starti < endi <= 106
解答 #
本质上要寻找同时最大重叠的区间数。
排序后,扫描线从左到右扫描,当遇到一个会议的开始时间时,计数器加一,遇到一个会议的结束时间时,计数器减一。取计数器的最大值即为所需会议室的最小数量。
class Solution:
def minMeetingRooms(self, intervals: List[List[int]]) -> int:
events = []
for start, end in intervals:
events.append((start, 1))
events.append((end, -1))
events.sort()
cnt = 0
maxCnt = 0
for _, delta in events:
cnt += delta
maxCnt = max(cnt, maxCnt)
return maxCnt