给定代表各个会议起始和结束时间的时间段,其中可能会有重叠,为最少安排多少会议室能够安排下这些会议。 采用的方法具有通用性:扫描线方法。扫描线的思想很巧妙,适用于一些一维算法问题的解决。这些问题涉及具有头尾节点的排序问题。 例如[[0, 30],[5, 10],[15, 20]],将这三个区间在x轴上画出来,并用一条垂直于x轴的线作为扫描线从左至右扫描,会很容易得出答案,即与扫描线焦点的最大值即为所求。但是在程序中我们怎样表示这种思想呢? -对所有点进行标记,区分起始点和终止点 -对所有点进行排序 -依次遍历每个点,遇到起始点+1,遇到终止点-1,并更新记录最大值
def minMeetingRoom(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:
if arr[1]:
n+=1
else:
n-=1
max_num = max(max_num,n)
return max_num