直接回答
Top K 的标准解法是维护一个大小为 K 的最小堆:遍历数据,堆未满直接入堆;堆满后若新元素大于堆顶则替换堆顶并调整。遍历结束堆中即最大的 K 个,时间 O(n log K)、空间 O(K),适合流式和内存受限的海量数据场景。
展开解析
为什么用最小堆而不是最大堆:要找最大的 K 个,淘汰的候选是堆内最小者,堆顶 O(1) 给出当前第 K 大。对比其他方案:全排序 O(n log n),数据大时不可行;快速选择(QuickSelect)平均 O(n),但要求数据一次性可随机访问,且会修改数组;分治法把数据分片各自求 Top K 再归并,适合分布式。追问方向:Top K 高频词(先哈希计数再堆)、要求结果有序(堆弹出即升序)、近似海量场景用 Count-Min Sketch 估算频率再堆排、去重逻辑如何处理。易错点:建堆顺序——先填满 K 个再开始比较替换,比较方向写反得到的是 Bottom K。