leetcode_253 会议室 II

438 阅读1分钟

要求

给你一个会议时间安排的数组 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)

image.png

重点问题

解题思路:

我们这个部分使用一个从[0,最大时间+1]的获取所有时间的在开始加1,在结尾减1,这个部分可以理解成在开始占用该房间,到最后的时候释放了该房间,做循环累加的时候,在占用期间都是1,多个会议时间占据相同的时间的时候,就会出现时间的叠加,所以最后我们得到一个最大值就是我们必须的办公室的个数。