图解算法通识讲义线性结构

数组区间合并与快速选择

核心心智模型:锚定左界,贪心吃进;按起点升序排序,连续重叠区间平滑熔断吞并。

核心交互式算法图解演练沙盒
区间合并模型

区间排序与贪心重叠融合演练

步骤 1 / 4
正在审视区间:[2, 6]
先排序 O(N log N) + 线性扫描 O(N)
合并结果集 Merged Intervals
[1, 3]

重叠探测:当前区间 [2, 6] 的起点 2 <= 前一区间 [1, 3] 的终点 3,存在重叠!

关键操作与时空复杂度速查对照表
操作 / 算法阶段平均时间最坏时间空间复杂度核心底层机制
区间合并总耗时O(N log N)O(N log N)O(N)瓶颈在于对区间左端点的全量排序。
快速选择单值定位O(N)O(N^2)O(log N)每次递归排除一半,N + N/2 + N/4 = 2N。
template.java
Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));
List<int[]> merged = new ArrayList<>();
for (int[] interval : intervals) {
    if (merged.isEmpty() || merged.get(merged.size() - 1)[1] < interval[0]) {
        merged.add(interval);
    } else {
        merged.get(merged.size() - 1)[1] = Math.max(merged.get(merged.size() - 1)[1], interval[1]);
    }
}
return merged.toArray(new int[merged.size()][]);
解题核心心法提炼
  • 所有区间调度、区间合并问题,80% 的第一步都是「排序」,排好序后问题立刻退化为简单的一维线性贪心。
  • 快速选择在数组求第 K 大中比小顶堆更加高效(平摊 O(N) vs 堆的 O(N log K))。
常见踩坑警示与避坑指南
  • 排序比较器中直接使用 a[0] - b[0] 在负数区间可能引发整数溢出。

对应 Hot 100 实战题目突围

原理已掌握!立即进入沉浸式工作台开始实战演练,强化代码肌肉记忆

查看全部题目