Meeting Rooms I & II
题目描述
- 求是否有冲突
- 求需要多少个room
思路
Intervals的题目,首先我们按照start time sort一下,这样便于后面的处理。sort用到的 是python的sorted和key paramer.
intervals = sorted(intervals, key=lambda interval: interval.start)
1的话因为start time后面的必然在后面开始,只要确定开始的时候前面的已经结束就可以了, 而且只需要比较前面一个。
2的话有点像airline那个线扫描的题目,我们可以用一个heap来保存前面的end time,这样 当遇到一个新的start time时,只需要将在这之前end的meeting都pop掉就可以了。并且在 这个过程中计算需要的room的数量。
Solution
from operator import itemgetter, attrgetter
from heapq import *
class Solution(object):
def minMeetingRooms(self, intervals):
if not interval:
return 0
intervals = sorted(intervals, key=lambda interval:interval.start)
length = len(intervals)
cur_num = 0
max_num = 0
end_times = []
for i in range(length):
cur_num += 1
heappush(end_times, intervals[i].end)
while end_times and end_times[0] <= intervals[i].start:
heappop(end_times)
cur_num -= 1
max_num = max(max_num, cur_num)
return max_num