# 一天会议安排
# 要求会议次数最多
from operator import itemgetter
# 贪心策略
# 优先选取结束时间最早的会议,当结束时间相同时,优先选取持续时间最短的
# 初始列表
my_list = [
# 会议标签
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
# 会议开始时间
[8, 9, 10, 11, 13, 14, 15, 17, 18, 16],
# 会议结束时间
[10, 11, 15, 14, 16, 17, 17, 18, 20, 19],
# 会议持续时间
[2, 3, 5, 3, 3, 3, 2, 1, 2, 3]
]
# print(my_list)
# 将列表在按照 list[2]升序的基础上 再按 list[3] 升序
sorted_list = [list(t)
for t in zip(*sorted(zip(*my_list), key=itemgetter(2, 3)))]
# 安排的会议次数
sum = 0
i = 1
while i < 10:
j = i
while j < 10 and sorted_list[1][j] < sorted_list[2][i-1]:
j += 1
if j < 10 and sorted_list[1][j] >= sorted_list[2][i-1]:
sum += 1
i = j+1
# 避免会议只有一个无法识别,避免最后一个会议没有统计
if len(sorted_list) == 1 or sum != 0:
sum += 1
print("会议次数:", sum)
一天会议安排(贪心算法-Python)
于 2024-03-01 11:36:30 首次发布