920.会议室
描述
给定一系列的会议时间间隔,包括起始和结束时间[[s1,e1],[s2,e2],…(si < ei),确定一个人是否可以参加所有会议。
Example
样例1
输入: intervals = [(0,30),(5,10),(15,20)]
输出: false
解释:
(0,30), (5,10) 和 (0,30),(15,20) 这两对会议会冲突
样例2
输入: intervals = [(5,8),(9,15)]
输出: true
解释:
这两个时间段不会冲突
class Solution:
def canAttendMeetings(self, intervals):
intervals.sort(key = lambda x: x.start)
for i in range(1,len(intervals)):
if intervals[i].start < intervals[i-1].end:
return False
return True
思路就是排序之后再比较是否有重叠区间。
919.会议室 2
给定一系列的会议时间间隔intervals,包括起始和结束时间[[s1,e1],[s2,e2],...] (si < ei),找到所需的最小的会议室数量。
Example
样例1
输入: intervals = [(0,30),(5,10),(15,20)]
输出: 2
解释:
需要两个会议室
会议室1:(0,30)
会议室2:(5,10),(15,20)
样例2
输入: intervals = [(2,7)]
输出: 1
解释:
只需要1个会议室就够了
这道题运用了扫描线的思路,将起始时间和结束时间在x轴上标记,然后计数,遇到起始时间就+1(打开一个会议室),遇到结束时间就-1(关闭一个会议室),取这个过程中的最大值,则是需要的最小会议室数。
"""
Definition of Interval.
class Interval(object):
def __init__(self, start, end):
self.start = start
self.end = end
"""
class Solution:
def minMeetingRooms(self, intervals):
# Write your code here
start = []
end = []
for i in intervals:
start.append(i.start)
end.append(i.end)
start.sort()
end.sort()
a , b = 0 , 0
min_room = 0
count_room = 0
while a < len(start):
if start[a] < end[b]:
count_room += 1
a += 1
min_room = max(min_room , count_room)
else:
count_room -= 1
b += 1
return min_room
网友评论