要求
给你一个会议时间安排的数组 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:
if not intervals:
return 0
if not intervals[0]:
return 1
intervals = sorted(intervals,key = lambda x:x[1])
record = [0 for _ in range(intervals[-1][1] + 1)]
for interval in intervals:
begin,end = interval[0],interval[1]
record[begin] += 1
record[end] -= 1
for i,x in enumerate(record):
if i > 0:
record[i] += record[i - 1]
return max(record)
重点问题
解题思路:
我们这个部分使用一个从[0,最大时间+1]的获取所有时间的在开始加1,在结尾减1,这个部分可以理解成在开始占用该房间,到最后的时候释放了该房间,做循环累加的时候,在占用期间都是1,多个会议时间占据相同的时间的时候,就会出现时间的叠加,所以最后我们得到一个最大值就是我们必须的办公室的个数。