使用贪心算法和优先队列解决会议时间安排问题

题目:给定一个会议时间安排的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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值