题目:给定一个会议时间安排的2维数组 meetings ,每个会议时间都会包括开始和结束的时间。假设每个会议都整点开始且整点结束,为避免会议冲突,请你计算至少需要多少间会议室,才能满足这些会议安排。
例如,当 meeings =[[2,6],[1,3],[13,14],[15,18],[5,6],[4,7],[9,14]]时.输出结果为3.
实现步骤:
1.导入一个heapq模块,用于操作堆
import heapq
2.定义一个函数,用来接受一个会议时间的列表meetings作为输入(minMeetingRoom),判断输入的会议列表是否为空
def minMeetingRooms(meetings):
if not meetings:
return 0
4.将会议按照开始时间进行升序排序
meetings.sort(key=lambda x: x[0])
5.创建一个优先队列用来存储每个会议的结束时间(end_time),将第一个会议的结束时间加入到优先队列中
end_times = []
heapq.heappush(end_times, meetings[0][1])
6.遍历每个会议,检查当前会议的开始时间是否晚于已安排会议中最早结束的会议的结束时间,如果当前会议的开始时间晚于最早结束的会议的结束时间,说明可以重用会议室,更新结束时间
for i in range(1, len(meetings)):
if meetings[i][0] > end_times[0]:
heapq.heappop(end_times)
heapq.heappush(end_times, meetings[i][1])
return len(end_times)
10.设置测试样例进行测试eg:[[2,6],[1,3],[13,14],[15,18],[5,6],[4,7],[9,14]]
meetings = [[2,6],[1,3],[13,14],[15,18],[5,6],[4,7],[9,14]]
print(minMeetingRooms(meetings))
完整代码:
import heapq
def minMeetingRooms(meetings):
if not meetings:
return 0
meetings.sort(key=lambda x: x[0])
end_times = []
heapq.heappush(end_times, meetings[0][1])
for i in range(1, len(meetings)):
if meetings[i][0] > end_times[0]:
heapq.heappop(end_times)
heapq.heappush(end_times, meetings[i][1])
return len(end_times)
meetings = [[2,6],[1,3],[13,14],[15,18],[5,6],[4,7],[9,14]]
print(minMeetingRooms(meetings))