253. 会议室 Ii

253. 会议室 II #

链接 #

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