You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3如何查找所有参会人均可用的公共会议时间槽?

实现方案

解决思路

  • 第一步:汇总所有参会人的全部会议记录,展平为单层级的会议时间列表
  • 第二步:将所有会议按开始时间升序排序
  • 第三步:合并重叠/时间连续的会议:如果前一个会议的结束时间 >= 后一个会议的开始时间,就将两个会议合并,结束时间取两者的最大值
  • 第四步:遍历合并后的会议列表,依次计算会议前后、相邻会议之间的空隙,即为所有人都空闲的时间段

完整代码

p1_meetings = [
    (855,  915), 
    (955, 1015), 
    (1155, 1215),
]

p2_meetings = [
    (815, 955),
    (1015, 1055), 
    (1115, 1255),
]

# 转换为整数方便计算
START_OF_DAY = 0
END_OF_DAY = 2359

meetings = [p1_meetings, p2_meetings]

def get_available_time(List_of_meetings_times):
    # 1. 展平所有参会人的会议列表
    all_meetings = []
    for person_meetings in List_of_meetings_times:
        all_meetings.extend(person_meetings)
    
    # 无会议的特殊情况:全天空闲
    if not all_meetings:
        print(f"00 {END_OF_DAY}")
        return
    
    # 2. 按会议开始时间排序
    all_meetings.sort(key=lambda x: x[0])
    
    # 3. 合并重叠/相邻会议
    merged = [all_meetings[0]]
    for curr_start, curr_end in all_meetings[1:]:
        last_start, last_end = merged[-1]
        # 当前会议和上一个合并后的会议重叠/相邻,合并
        if curr_start <= last_end:
            new_end = max(last_end, curr_end)
            merged[-1] = (last_start, new_end)
        else:
            merged.append((curr_start, curr_end))
    
    # 4. 计算空闲时间段
    available_slots = []
    # 当日开始到第一个会议的空闲
    if merged[0][0] > START_OF_DAY:
        available_slots.append((START_OF_DAY, merged[0][0]))
    # 相邻会议之间的空闲
    for i in range(1, len(merged)):
        prev_end = merged[i-1][1]
        curr_start = merged[i][0]
        if prev_end < curr_start:
            available_slots.append((prev_end, curr_start))
    # 最后一个会议到当日结束的空闲
    if merged[-1][1] < END_OF_DAY:
        available_slots.append((merged[-1][1], END_OF_DAY))
    
    # 按要求格式输出
    for s, e in available_slots:
        if s == START_OF_DAY:
            print(f"00 {e}")
        else:
            print(f"{s} {e}")

get_available_time(meetings)

运行输出

00 815
1055 1115
1255 2359

内容的提问来源于stack exchange,提问作者Leearn2303

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:06:03