📅  最后修改于: 2023-12-03 15:11:39.191000             🧑  作者: Mango
在一定时间范围内,可能出现多个约会时间会重复的情况,此时需要查找所有有冲突的约会。这就需要编写一个程序来解决这个问题。
输入: n个约会的开始时间和结束时间。
输出: 所有有冲突的约会。
实现思路: 首先,将所有的约会按照开始时间排序,然后依次遍历每个约会,判断当前约会的结束时间是否小于下一个约会的开始时间,如果小于,则说明没有冲突,将此约会加入结果集中;否则,说明有冲突,将此约会和下一个约会加入结果集中。
def find_conflicts(schedule):
"""
schedule: list of tuples, each tuple contains start and end time of a schedule
return: list of tuples, each tuple represents a conflict schedule
"""
if len(schedule) <= 1:
return []
schedule = sorted(schedule, key=lambda x: x[0])
conflicts = []
for i in range(len(schedule) - 1):
if schedule[i][1] > schedule[i+1][0]:
conflicts.append((schedule[i], schedule[i+1]))
return conflicts
schedules = [
(datetime.datetime(2021, 5, 1, 8, 0), datetime.datetime(2021, 5, 1, 9, 0)),
(datetime.datetime(2021, 5, 1, 9, 0), datetime.datetime(2021, 5, 1, 10, 0)),
(datetime.datetime(2021, 5, 1, 8, 30), datetime.datetime(2021, 5, 1, 10, 30)),
(datetime.datetime(2021, 5, 1, 11, 0), datetime.datetime(2021, 5, 1, 12, 0)),
(datetime.datetime(2021, 5, 1, 13, 0), datetime.datetime(2021, 5, 1, 14, 0))
]
print(find_conflicts(schedules))
输出:
[((datetime.datetime(2021, 5, 1, 8, 0), datetime.datetime(2021, 5, 1, 9, 0)),
(datetime.datetime(2021, 5, 1, 8, 30), datetime.datetime(2021, 5, 1, 10, 30))),
((datetime.datetime(2021, 5, 1, 8, 30), datetime.datetime(2021, 5, 1, 10, 30)),
(datetime.datetime(2021, 5, 1, 9, 0), datetime.datetime(2021, 5, 1, 10, 0)))]