LeetCode253:Meeting Rooms II

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

猜你喜欢

转载自blog.csdn.net/mengmengdajuanjuan/article/details/86289727