253. Meeting Rooms II
Medium
Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...]
(si < ei), find the minimum number of conference rooms required.
Example 1:
Input: [[0, 30],[5, 10],[15, 20]]
Output: 2
Example 2:
Input: [[7,10],[2,4]] Output: 1
NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.
笔记:
需要重新申请一个新的room的条件是,当前新的任务的开始时间要比最早结束使用的那个room的结束时间早,所以每次只考虑最早结束的使用的那个房间的结束时间是多少。用一个最小堆来维护这个最早结束时间。使用堆的话,push和pop都是log n的效率。
另外一个使用最小堆的题目 Kth Largest Element in an Array
方法1:
class Solution:
def minMeetingRooms(self, intervals: List[List[int]]) -> int:
intervals.sort(key=lambda x:x[0])
heap = []
for interval in intervals:
if not heap or heap[0] > interval[0]:
heapq.heappush(heap, interval[1])
else:
heapq.heappushpop(heap, interval[1])
return len(heap)
如果是使用list来存储当前有哪些房间在使用,每次需要的比较时间是O(n),需要遍历所有的房间判断是否有合适的放假,这样效率就会变低。