学习首页/贪心与回溯/区间调度交互演示 · JavaScript

代码与动画 INTERVAL SCHEDULING · GREEDY

区间调度.

优先选择结束最早的区间,求最多互不重叠的区间集合。

时间 O(n log n)扫描 O(n)最大化区间数量

原理与执行逻辑

按结束时间升序选择区间,每次保留与已选区间兼容且结束最早的候选。较早结束为后续留下更多可用时间,可最大化区间数量。

执行步骤

  1. 按区间终点排序。
  2. 以负无穷初始化上次选择的终点 end。
  3. 当前起点不小于 end 时选择该区间,并更新 end。
  4. 跳过发生重叠的区间,扫描结束后返回选中集合。

关键理解

当前问题最大化数量,区间没有权重。最优方案的首个区间可替换成结束最早者且不减少后续选择;起点等于上一终点时允许衔接。

简短示例

[1,4]、[3,5]、[4,6] 按结束时间扫描,选择 [1,4] 后跳过 [3,5],再选择 [4,6],共 2 个。

代码与执行动画

STEP 0 / 13
区间调度
function schedule(intervals) {  const sorted = [...intervals].sort((a, b) => a[1] - b[1]);  const result = []; let end = -Infinity;  for (const interval of sorted) {    if (interval[0] >= end) {      result.push(interval);      end = interval[1];    }  }  return result;}
11 行 · 0 个片段标记
1–4原区间 03–5原区间 10–6原区间 25–7原区间 36–9原区间 48–10原区间 5
当前数据正在操作已访问 / 命中标记 / 指针
0

按结束时间排序

以结束时间升序扫描区间。

配置演示数据

应用后重新生成执行过程,可单步观察结果。

实现说明

区间调度的操作规则

按结束时间排序;一个区间的起点等于上一选择区间的终点时可继续选择。本问题不包含权重。

对应题目与扩展练习

观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。