Top K 不是固定算法,而是“从大量元素中保留最大或最小的 K 个”。直接排序简单,时间 O(n log n);当 K 远小于 n,维护大小为 K 的堆通常更合适。

求最大的 K 个元素时使用小顶堆:先把元素加入堆,超过 K 个就弹出堆顶。堆顶始终是当前入选集合中最小者,新元素只有更大才有保留价值。每次调整 O(log K),总时间 O(n log K)、空间 O(K),并且适合数据流,因为无须保存全部输入。

快速选择利用快排分区:枢轴归位后,根据其位置只处理包含第 K 个边界的一侧。平均时间 O(n)、最坏 O(n²),随机枢轴可降低退化风险;它会修改数组,且只保证分区,不保证 Top K 内部有序。若还要求输出顺序,可再排序 K 个结果。

当值域或频次范围有限,可计数后从高到低收集,成本约 O(n+R);高频元素问题也可按频次建桶。多机海量数据可先分片求局部 Top K,再合并候选,但分片规则与热点倾斜需要额外设计。

常见误区是求最大 K 却建最大堆导致保留方向错误、默认快速选择稳定、忽略重复值及 K 越界,以及把“第 K 大”和“前 K 大且有序”混为同一输出。小结:离线且可改数组选快速选择,流式或内存受限选 K 大小堆,值域小再考虑计数。