外观
一句话答案
Top-K 三种解法:快速选择 O(n) 平均、小顶堆 O(nlogk) 适合流式、排序 O(nlogn) 最简单。
核心要点
| 方法 | 时间 | 空间 | 适用 |
|---|---|---|---|
| 快速选择 | O(n) | O(1) | 一次性大数据 |
| 小顶堆 | O(nlogk) | O(k) | 流式/动态 |
| 排序 | O(nlogn) | O(1) | 数据量小 |
小顶堆: 维护 K 大小的堆,遍历时比堆顶大就替换
追问与易错
追问方向:
- 快速选择的最坏情况怎么优化?
- Top-K 的 K 很大怎么办?
- 海量数据 Top-K 怎么做?
易错点:
- ❌ 排序是 Top-K 最好方案——堆方法 O(nlogk) 更优
- ❌ 小顶堆不是应该用大顶堆吗——Top-K 大用小顶堆
💡 记忆锚点
找最大的K个数,反直觉地用小顶堆:维护一个K大小的小顶堆,堆顶是"门槛",比门槛高的才能进来把最矮的挤掉,最后堆里剩的就是最大的K个。流式数据用堆(O(nlogk)),一次性大数据用快速选择(O(n)均摊,类似快排但只递归一半),数据少直接排序。