图解算法通识讲义树与图

堆与优先队列 Top-K 动态流维护

核心心智模型:局部堆顶,动态过滤;求前 K 个最大用小顶堆,对流式数据维持 O(log K) 的极值筛选。

核心交互式算法图解演练沙盒
堆与优先队列模型

小顶堆动态维护 Top-K 极值演练

步骤 1 / 4
当前扫描元素:3
堆未满,直接入堆
堆操作单步耗时: O(log K)
固定大小为 2 的小顶堆结构 (Min-Heap)
3堆顶 (门槛)

Top-2 大元素求解(维护大小为 2 的小顶堆):元素 3 进入堆,成为当前堆顶。

关键操作与时空复杂度速查对照表
操作 / 算法阶段平均时间最坏时间空间复杂度核心底层机制
查看堆顶极值O(1)O(1)O(1)直接读取堆顶数组下标 0 即可。
插入 / 弹出极值O(log K)O(log K)O(1)在高度为 log K 的完全二叉树上上浮或下沉调整。
template.java
PriorityQueue<Integer> minHeap = new PriorityQueue<>(k);
for (int num : nums) {
    minHeap.offer(num);
    if (minHeap.size() > k) {
        minHeap.poll();
    }
}
return minHeap.peek();
解题核心心法提炼
  • 找第 K 大元素用容量 K 的小顶堆;找第 K 小元素用大顶堆。
  • 数据流中位数设计:对顶堆,大顶堆和小顶堆元素数量差维持不超过 1。
  • 优先队列自定义比较器时,Java 默认是小顶堆,(a, b) -> b - a 可逆转为大顶堆。
常见踩坑警示与避坑指南
  • Java 比较器中直接使用 a - b 进行比较可能导致整数下溢溢出,推荐使用 Integer.compare(a, b)。
  • 误将全部 N 个元素推入大顶堆再弹 K 次,这退化为了 O(N log N),违背了 Top-K 的剪枝初衷。

对应 Hot 100 实战题目突围

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

查看全部题目