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