LeetCode253:Meeting Rooms II
阿新 • • 發佈:2019-01-12
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.
For example,
Given [[0, 30],[5, 10],[15, 20]],
return 2.
1)可以按照每個區間的起點排序, 然後依次將每個區間的終點放到一個集合中,如果下一個區間起點大於等於之前某區間的終點, 就將其從集合中刪除. 這種做法的原理是如果一個區間的起點大於等於另一個區間的終點, 那麼他們是不重合的。
2)將這三個區間在x軸上畫出來,並用一條垂直於x軸的線作為掃描線從左至右掃描,會很容易得出答案,即與掃描線焦點的最大值即為所求。但是在程式中我們怎樣表示這種思想呢?
-對所有點進行標記,區分起始點和終止點
-對所有點進行排序
-依次遍歷每個點,遇到起始點+1,遇到終止點-1,並更新記錄最大值
# Definition for an interval. # class Interval(object): # def __init__(self, s=0, e=0): # self.start = s # self.end = e class Solution: def minMeetingRooms(self, intervals): if intervals is None or len(intervals) == 0: return 0 tmp = [] # 標記起始點終止點 for inter in intervals: tmp.append((inter.start, True)) tmp.append((inter.end, False)) # 排序 tmp = sorted(tmp, key=lambda v: (v[0], v[1])) n = 0 max_num = 0 for arr in tmp: # 起始點+1 if arr[1]: n += 1 # 終止點-1 else: n -= 1 max_num = max(n, max_num) return max_num