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