拿下技术面上传简历

从 n = 10^8 个 int(约 400MB,内存装不下全部)的数据流里找出最大的 K = 100 个数,数据只能流式读取。说说你的方案、时间复杂度和空间复杂度,并解释:为什么这里要用最小堆而不是最大堆?

数据结构与算法线性与树结构1-3 年知识点 1 个

面试官在考什么

判断候选人是否理解「Top-K 用最小堆」背后的淘汰逻辑,以及是否分得清 heapify 建堆与逐个插入。

堆与优先队列

回答框架 · 前两步

  1. 方案:维护一个大小为 K 的最小堆,堆顶是当前已选出的 Top-K 中的最小值。数据流逐个元素过来,若大于堆顶就替换堆顶并下沉,否则直接丢弃。
  2. 复杂度:时间 O(n log K),空间 O(K)。n=10^8、K=100 时 log K 约等于 7,单元素摊到的成本很低。

还有 3 条答案要点、 3 层追问、 4 个常见坑, 以及针对你简历的追问路径,在定制报告里。

上传简历,生成我的题库先看示例报告

延伸阅读

想看这个方向的整体准备路线? 进入「数据结构与算法」方向页

同一能力域的其他题