会议室日程安排问题(python贪心算法)
会议室日程安排问题(最少需要多少个会议室)
按照贪心算法,此问题可以得到最优解!原来是按结束时间排序,但这样的话并不是最少的会议室数(下面有反例)而要得到最少的会议室数,需要将议程时间按开始时间排序。下面是完整的代码:
class Program(object):
def __init__(self, start, end):
self.start = start
self.end = end
def bestArrange(programs, start_time):
"""programs 为项目列表
strat_time 为最早开始的时间"""
programs = sorted(programs, key=lambda x: x.end)#将所有的议程按结束时间排序
# for i in range(len(programs)):
# print(programs[i].start)
res = 0
while True:
temp = []
startTime = start_time#每次循环设置一个初始时间
for i in range(len(programs)):
if startTime <= programs[i].start:
startTime = programs[i].end#下一个议程的开始时间要晚于当前议程的结束时间
else:
temp.append(programs[i])
res += 1
if len(temp) == 0:#当议程全部安排完之后就结束
break
programs = temp
return res
if __name__ == '__main__':
a1 = Program(6, 8)#实例化
a2 = Program(10, 11)
a3 = Program(9, 12)
a4 = Program(11.5, 15)
a5 = Program(13,14)
programs = [a1, a2, a3, a4, a5]
a = bestArrange(programs, 6)
print(a)
上面是按照结束时间排序,则需要的会议室数量是3,而如果按照开始时间排序,得到的结果是2
【华为OD机试真题】可以转到CSDN相关专栏订阅学习:https://blog.csdn.net/weixin_45541762/article/details/129903356
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】