网易首页 > 网易号 > 正文 申请入驻

面试官抛来1个经典题:求Top K,为何堆化是O(n)而不是O(n log n)?

0
分享至

准备高级后端面试时,面试官抛来一道经典题:“给定一个包含 n 个整数的无序数组,返回其中最大的 k 个元素。” 我第一反应是排序后切片:先把整个数组排好序,再取前 k 个。O(n log n) 听起来也没什么问题……但面试官显然在等更优的答案。我反复想:“既然只需要 top k,真的有必要把整个数组都排一遍吗?”那种感觉就像面对一扇锁着的门,手里攥着一串不匹配的钥匙,明知道正确的钥匙就在附近,却一时找不到。 这个瞬间让我真正开始理解堆和优先队列。之前听说过这些名词,但没意识到它们到底特殊在哪。后来才发现,堆的神奇之处不只是能快速拿到最小/最大值,而是:把一个无序数组建成堆,只需要线性时间。这个洞察改变了我对很多问题的看法。 堆本质上是一棵存储在数组中的二叉树,每个父节点与子节点之间满足固定顺序:最小堆中父节点 ≤ 子节点,最大堆中父节点 ≥ 子节点。 更妙的是,对任意无序数组执行“堆化”,从最后一个内部节点开始,逐层向下调整,就能在 O(n) 时间内得到一个合法堆,而不是 O(n log n)。 为什么堆化是 O(n) 而不是 O(n log n)? 先看常规思路:往堆里插入 n 个元素,每次插入 O(log n),所以总复杂度是 O(n log n)。 但自底向上堆化不一样:高度越低、节点越多,而每个节点向下调整的代价越小。 - 最底层有 n/2 个叶子节点,不需要下沉; - 上一层有 n/4 个节点,最多下沉 1 次; - 再上一层有 n/8 个节点,最多下沉 2 次; - 依此类推。 总工作量约为: n/4 × 1 + n/8 × 2 + n/16 × 3 + ... = O(n) 这就是“数组建堆可以线性完成”的直觉来源,也是它最反直觉的地方。 有了合法堆之后,每次取出最小/最大值只需要 O(log n),因为只需要修复从根到叶子的一条路径。对“k 个最大元素”问题,可以维护一个大小为 k 的最小堆: 1. 先把前 k 个数建成堆,O(k); 2. 遍历剩余 n-k 个数,如果当前元素比堆顶大,就替换堆顶并调整堆; 3. 遍历结束后,堆中的 k 个元素就是数组中最大的 k 个元素,其中堆顶是它们中最小的那个。 整体时间复杂度 O(n log k)。当 n 很大、k 很小时,这比 O(n log n) 的全排序高效得多。 先看最直接的排序解法: ```python def k_largest_sort(nums, k): # O(n log n) 时间,O(n) 空间(CPython 的 Timsort 需要额外空间) return sorted(nums, reverse=True)[:k] ``` 简单,但当 n 巨大、k 很小时非常浪费。 用最小堆实现: ```python import heapq def k_largest_heap(nums, k): """ 返回数组中最大的 k 个元素。 使用大小为 k 的最小堆。 时间:O(k) 建堆 + O((n-k) log k) ≈ O(n log k) 空间:O(k) """ if k <= 0: return [] heap = nums[:k] heapq.heapify(heap) # 建堆是 O(k) for x in nums[k:]: if x > heap[0]: heapq.heapreplace(heap, x) return sorted(heap, reverse=True) ``` 代码里用 `heapreplace` 而不是先 `pop` 再 `push`,它更高效,时间复杂度仍然是 O(log k)。 当时我突然意识到,从无序列表线性建堆的方法,像在废品堆里找到了一把真正匹配的钥匙。之前所有模糊的“一定还有更好的办法”,都在那一刻串起来了。 下次遇到 Top K,或许可以先别急着排序,想想能不能只维护 k 个元素的最小堆。毕竟,算法题考的不只是答案,而是你是否能看到“不需要全排序”的那扇门。


特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
心理学:结婚率暴跌的真相,根本不是彩礼太贵,而是大批男人,主动不想结婚了

心理学:结婚率暴跌的真相,根本不是彩礼太贵,而是大批男人,主动不想结婚了

心理观察局
2026-08-13 07:02:14
《重器》直到夏英杰爬上余高远的床,才知,陈一众为啥能去修刑法

《重器》直到夏英杰爬上余高远的床,才知,陈一众为啥能去修刑法

草莓解说体育
2026-08-14 01:18:44
梁文锋,开始算账了

梁文锋,开始算账了

豹变
2026-08-14 08:00:06
这就是赤裸裸的现实!工商银行已经到了最危险的时候?

这就是赤裸裸的现实!工商银行已经到了最危险的时候?

蜉蝣说
2026-08-13 11:12:08
高级感碎一地!百花奖颁奖典礼上,引导人员挂着大号姓名牌,引发争议

高级感碎一地!百花奖颁奖典礼上,引导人员挂着大号姓名牌,引发争议

火山詩话
2026-08-12 15:43:13
离谱到无解!日本女警白天执法晚上兼职,日本95后女警兼职风俗女,提供特殊服务偶遇同事

离谱到无解!日本女警白天执法晚上兼职,日本95后女警兼职风俗女,提供特殊服务偶遇同事

怪味历史连连看
2026-08-12 19:15:08
中方这回绝不救市!日元抛售美债引爆死亡螺旋,美日彻底玩崩了!

中方这回绝不救市!日元抛售美债引爆死亡螺旋,美日彻底玩崩了!

史行途
2026-08-14 01:35:59
特朗普号召全美举报中国人抢饭碗,不用证据,光凭我觉得就能定罪

特朗普号召全美举报中国人抢饭碗,不用证据,光凭我觉得就能定罪

浯江孤舟
2026-08-13 09:45:03
WTT大满贯:男单16强出炉!国乒2胜4负,日本、法国各3人晋级

WTT大满贯:男单16强出炉!国乒2胜4负,日本、法国各3人晋级

全言作品
2026-08-14 04:06:31
6年前我国铁路负债高达5.48万亿,再看如今的数据,结果令人意外

6年前我国铁路负债高达5.48万亿,再看如今的数据,结果令人意外

离离言几许
2026-08-10 14:12:54
足球小将1-1巴萨!董路不服:我们绝对机会更多 对方教练跟我道歉

足球小将1-1巴萨!董路不服:我们绝对机会更多 对方教练跟我道歉

念洲
2026-08-14 06:56:17
曝马竞1.2亿欧巨星已在队内道歉:自知无法加盟巴萨 承诺仍会拼命

曝马竞1.2亿欧巨星已在队内道歉:自知无法加盟巴萨 承诺仍会拼命

风过乡
2026-08-14 08:16:13
76人新赛季全美直播达上限34场,与尼克斯&湖人&马刺并列最多

76人新赛季全美直播达上限34场,与尼克斯&湖人&马刺并列最多

懂球帝
2026-08-14 08:08:17
女性长期使用情趣用品,身体可能出现哪些不适?不少人缺乏认知

女性长期使用情趣用品,身体可能出现哪些不适?不少人缺乏认知

看世界的人
2026-08-07 09:22:50
男子累计借给朋友140万元,不料对方意外离世,亲属全部放弃继承遗产,钱一度要不回来,法院判了

男子累计借给朋友140万元,不料对方意外离世,亲属全部放弃继承遗产,钱一度要不回来,法院判了

大风新闻
2026-08-13 22:02:03
日方这回尴尬了!中国运动员出征日本自带食材,连水都不用当地的

日方这回尴尬了!中国运动员出征日本自带食材,连水都不用当地的

乌克兰小静
2026-08-13 02:11:10
苏州一对情侣,谈了7年,女子提了18次分手,分手后在街头痛哭!

苏州一对情侣,谈了7年,女子提了18次分手,分手后在街头痛哭!

川渝视觉
2026-04-17 22:13:14
人类起源的故事正被彻底改写

人类起源的故事正被彻底改写

紫京讲谈
2026-08-12 08:07:35
30多吨价值超百万黑胡椒存安徽一冷库一年多“失踪”,警方介入,冷库回应:该赔会赔

30多吨价值超百万黑胡椒存安徽一冷库一年多“失踪”,警方介入,冷库回应:该赔会赔

潇湘晨报
2026-08-13 12:54:12
炸了!普京一脚踏上争议岛屿,当众吃口鱼子酱,日本首相直接破防:绝对无法容忍!

炸了!普京一脚踏上争议岛屿,当众吃口鱼子酱,日本首相直接破防:绝对无法容忍!

科技虎虎
2026-08-13 20:13:03
2026-08-14 08:32:49
算力游侠
算力游侠
游走在API与报错之间,用魔法(AI)打败魔法的非硬核玩家。
384文章数 85关注度
往期回顾 全部

头条要闻

普京罕见穿军装亲自坐镇指挥军演 日本反应极其激烈

头条要闻

普京罕见穿军装亲自坐镇指挥军演 日本反应极其激烈

体育要闻

负债十几亿的联赛,还在疯狂买球星

娱乐要闻

篡改红歌已立案,郭德纲大祸临头

财经要闻

可治疗癌症?神话破灭的片仔癀 陷入争议

科技要闻

一切皆插件!DeepSeek Harness正式发布

汽车要闻

全新红旗H7到底新在哪儿?

态度原创

游戏
本地
时尚
手机
公开课

《喵喵的结合》简体中文翻译开启公测 迟来的惊喜!

本地新闻

黄州一夜,苏轼写给普通人的月光

HYROX赛场上的美照怎么拍出来的?

手机要闻

小米澎湃OS 4来了!这次不开发布会

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版