Meeting Rooms

最简单自然是排序了,按照开始时间排序,每一个当前的开始时间都必须大于上一个会议的结束时间

class Solution(object):
    def canAttendMeetings(self, intervals):
        """
        :type intervals: List[Interval]
        :rtype: bool
        """
        intervals.sort(cmp = lambda x, y: cmp(x.start, y.start))
        for i in xrange(1, len(intervals)):
            if intervals[i].start < intervals[i - 1].end:
                return False

        return True

Meeting Rooms II

这个就是标准扫描线了,且现在只能想到扫描线能比较好的解决问题

class Solution(object):
    def minMeetingRooms(self, intervals):
        """
        :type intervals: List[Interval]
        :rtype: int
        """
        hashIntervals = []
        for interval in intervals:
            hashIntervals.append([interval.start, True])
            hashIntervals.append([interval.end, False])

        def comparator(aInterval, bInterval):
            if aInterval[0] != bInterval[0]:
                return cmp(aInterval[0], bInterval[0])
            if not aInterval[1]:
                return -1
            return 1

        hashIntervals.sort(cmp=comparator)
        count, result = 0, 0
        for interval in hashIntervals:
            if interval[1]:
                count += 1
            else:
                count -= 1
            result = max(result, count)

        return result

results matching ""

    No results matching ""