Meeting Rooms
题目描述
Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si < ei)
, determine if a person could attend all meetings.
For example,
Given [[0, 30],[5, 10],[15, 20]]
,
return false
.
解题方法
没有思路就先sort一下,这一题可以用comparator先根据起始时间sort一下, 这样后面的必然在前面之后开始,只需要考虑结束时间就可以。
然后我们再看怎样的情况下会有重叠的intervals,如果后面任意一个的start time早于前面的end time, 那么就代表重叠了。 我们需要比较后面的每一个吗?不需要,因为起始时间是有序的,只要后面第一个的start time晚于当前这一个的end time,就表示后面的肯定与当前这一个没有重叠。
所以我们Loop through每一个interval,比较intervals[i]的end time和intervals[i+1]的start time就可以。
comparator先把intervals按照start time sort一下
Solution
# Definition for an interval.
# class Interval(object):
# def __init__(self, s=0, e=0):
# self.start = s
# self.end = e
class Solution(object):
def canAttendMeetings(self, intervals):
"""
:type intervals: List[Interval]
:rtype: bool
"""
def compare(a, b):
return a.start - b.start
intervals = sorted(intervals, cmp=compare)
length = len(intervals)
if length == 1:
return True
for i in range(1, length):
if intervals[i].start < intervals[i-1].end:
return False
return True