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

Scheduler类schedule方法最大不重叠会议逻辑修复求助

会议调度问题的排查与修复

问题根源

现有Scheduler类的逻辑错误在于贪心策略的排序规则不符合最优要求:大概率是直接按会议开始时间排序后选择,这种方式无法保证选出最多数量的无重叠会议,甚至会选中重叠的会议,同时也没有处理多解时的优先级规则(结束日期字典序最小、结束相同选开始最早)。

修复方案

要实现题目要求的最优调度,必须采用正确的贪心策略:

  1. 排序优先规则:先按会议结束日期的字典序升序排列;若结束日期相同,则按开始时间升序排列。这种排序能确保每次选中的会议最早结束,为后续会议预留最多时间,从而最大化会议数量,同时满足多解时的优先级要求。
  2. 无重叠筛选:遍历排序后的会议,只保留与已选中会议无重叠的会议(即当前会议的开始时间 > 最后一个选中会议的结束时间)。

修复后的Scheduler类代码

import java.util.ArrayList;
import java.util.List;

// 假设Meeting类为题目给定的无需修改结构
// class Meeting {
//     private String start;
//     private String end;
//     public String getStart() { return start; }
//     public String getEnd() { return end; }
// }

class Scheduler {
    public void schedule(List<Meeting> meetings) {
        if (meetings == null || meetings.isEmpty()) {
            return;
        }

        // 按规则排序:结束日期字典序升序优先,结束相同则按开始时间升序
        meetings.sort((m1, m2) -> {
            int endCompare = m1.getEnd().compareTo(m2.getEnd());
            if (endCompare != 0) {
                return endCompare;
            }
            return m1.getStart().compareTo(m2.getStart());
        });

        List<Meeting> optimalMeetings = new ArrayList<>();
        optimalMeetings.add(meetings.get(0));

        for (int i = 1; i < meetings.size(); i++) {
            Meeting last = optimalMeetings.get(optimalMeetings.size() - 1);
            Meeting current = meetings.get(i);
            // 判定无重叠:当前会议开始时间严格晚于上一个会议的结束时间
            if (current.getStart().compareTo(last.getEnd()) > 0) {
                optimalMeetings.add(current);
            }
        }

        // 替换原列表为最优结果
        meetings.clear();
        meetings.addAll(optimalMeetings);
    }
}

逻辑解释

  • 排序阶段:自定义比较器严格遵循题目要求的多解优先级,确保在可选范围内,我们总是优先选择结束更早的会议,这是贪心算法中最大化无重叠会议数量的经典策略。
  • 筛选阶段:从排序后的第一个会议开始,逐个检查后续会议是否与已选中的最后一个会议重叠,只保留无重叠的会议,最终得到的就是数量最多且符合优先级的会议组合。
  • 列表修改:通过清空原列表并添加最优结果,满足题目要求的“修改传入列表”的操作方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:15:38