巧用小顶堆求解第 K 大元素,两道经典题一通百通
巧用小顶堆求解第 K 大元素两道经典题一通百通✨Bilibili 同步视频一、前言二、核心思路剖析2.1 逻辑推演2.2 文字图示演示Plain Text初始状态空堆设定 K 3步骤 1依次压入前 3 个元素 [9, 7, 8]堆满size 3步骤 2新增元素 10入堆后堆 size 4 K3步骤 3新增元素 6入堆后堆 size 4 K3三、复杂度分析⚙️四、C 代码实现4.1 解法一数组中的第 K 大元素4.2 解法二数据流中的第 K 大元素代码解读五、总结与刷题建议 标签# 算法 #堆结构 #C #面试题 #数据结构Bilibili 同步视频巧用小顶堆求解第 K 大元素两道经典题一通百通✨一、前言在算法刷题与面试场景中求解数组 / 数据流中的第 K 大元素是一道出镜率极高的经典题型。不少初学者面对该问题时常会陷入全量排序、暴力遍历的低效思路中。实则借助小顶堆这一精巧的数据结构便可化繁为简、四两拨千斤。本文将由浅入深拆解解题逻辑、推演执行流程、附上完整 C 代码并辅以图文演示原理带你彻底吃透这两道同源考题。二、核心思路剖析世间算法万变不离其宗。两道看似独立的题目 ——数据流中的第 K 大元素与数组中的第 K 大元素内核逻辑高度趋同皆可依托小顶堆实现高效求解。2.1 逻辑推演设我们需要筛选出一组数据里排名前K KK的大数若某元素想要跻身前 K 大序列其数值必须大于当前前 K 个元素里的最小值一旦新元素达标便淘汰原有 K 个元素中的最小值完成一轮更新迭代为了实时、快速获取当前 K 个元素的最小值小顶堆便是最优选择。小顶堆特性堆顶永远是整个堆结构中的最小值查询、弹出堆顶元素的时间复杂度极低。 总结要义以容量为 K 的小顶堆维护全局前 K 大元素堆内留存当前筛选出的 K 个大数堆顶即为整组数据的第 K 大元素。谁数值更小便被优先移出堆外恰似择优留强、汰弱留庸。2.2 文字图示演示Plain Text初始状态空堆设定 K 3堆结构[ 空 ] 目标筛选前3大元素最终堆顶为第3大元素步骤 1依次压入前 3 个元素 [9, 7, 8]堆满size 3小顶堆自动调整结构堆顶为最小值77 ← 堆顶当前前3大最小值 / 9 8 堆内元素{7,9,8}步骤 2新增元素 10入堆后堆 size 4 K3堆顶最小值7被弹出重新调整堆结构新堆顶为88 ← 新堆顶 / 9 10 堆内元素{8,9,10}步骤 3新增元素 6入堆后堆 size 4 K3堆顶最小值6被弹出堆结构不变8 ← 堆顶最终第3大元素 / 9 10全程可见无论元素如何新增更替堆内始终保留当前前 K 大元素堆顶就是我们所求的第 K 大元素。三、复杂度分析⚙️设数据总个数为n nn限定堆容量为K KK时间复杂度每个元素入堆、堆调整操作耗时O ( l o g K ) O(log K)O(logK)整体总复杂度为O ( n l o g K ) O(nlog K)O(nlogK)对比全量排序O ( n l o g n ) O(nlog n)O(nlogn)当K l l n K ll nKlln时效率提升十分显著。空间复杂度仅开辟大小为K KK的堆空间复杂度为O ( K ) O(K)O(K)内存占用极小。四、C 代码实现C 标准库中默认优先队列priority_queue为大顶堆我们可通过仿函数greaterint改造为小顶堆适配本题需求。4.1 解法一数组中的第 K 大元素适用于一次性给定完整数组直接求解第 K 大元素场景。#includeiostream#includevector#includequeue// 优先队列堆头文件usingnamespacestd;// 查找数组中第 K 大元素intfindKthLargest(vectorintnums,intk){// 定义小顶堆priority_queue数据类型, 底层容器, 比较规则priority_queueint,vectorint,greaterintminHeap;// 遍历所有元素逐个入堆for(intnum:nums){minHeap.push(num);// 堆容量超过 K弹出堆顶最小值if(minHeap.size()k){minHeap.pop();}}// 最终堆顶即为第 K 大元素returnminHeap.top();}intmain(){vectorintarr{3,2,1,5,6,4};intk2;intresfindKthLargest(arr,k);cout数组中第k大元素为resendl;return0;}4.2 解法二数据流中的第 K 大元素适用于动态持续流入数据的场景支持不断添加新数值实时查询第 K 大元素。#includeiostream#includevector#includequeueusingnamespacestd;classKthLargest{private:intk;// 小顶堆维护前 K 大元素priority_queueint,vectorint,greaterintminHeap;public:// 构造函数初始化 K 值与初始数据流KthLargest(intk_val,vectorintnums){kk_val;for(intnum:nums){minHeap.push(num);if(minHeap.size()k){minHeap.pop();}}}// 新增数据流元素并返回当前第 K 大元素intadd(intval){minHeap.push(val);if(minHeap.size()k){minHeap.pop();}returnminHeap.top();}};intmain(){vectorintstream{4,5,8,2};intk3;KthLargestkthLargest(k,stream);// 动态添加元素并输出结果coutkthLargest.add(3)endl;coutkthLargest.add(5)endl;coutkthLargest.add(10)endl;return0;}代码解读priority_queueint, vectorint, greaterint第三参数greaterint是构建小顶堆的核心堆顶始终为最小值元素入堆后强制校验堆大小一旦超出K KK立即弹出堆顶最小值保证堆内永远只留存前 K 大元素数据流版本将逻辑封装为类构造函数初始化初始数据add方法响应动态新增数据贴合真实业务场景。五、总结与刷题建议纵观两道同源题型小顶堆 固定容量 K是贯穿始终的核心解法思路一脉相承以小顶堆作 “筛选容器”守 K 位、汰小值堆顶定论答案。此思路摒弃了全量排序的冗余操作时空表现俱佳也是面试中面试官尤为青睐的解法。✅ 刷题建议先理解堆的底层特性分清大顶堆、小顶堆的使用场景亲手调试上述两份代码观察堆内元素变化对照前文图示加深理解前往力扣平台找到对应原题独立编写代码巩固思路做到提笔即写、思路通透。算法学习非一日之功吃透一类题型、掌握一种思想便可举一反三从容应对同类变式考题。

相关新闻

PyTorch 2.x 模型量化实战:3种PTQ方法精度对比与部署指南

PyTorch 2.x 模型量化实战:3种PTQ方法精度对比与部署指南

PyTorch 2.x 模型量化实战:3种PTQ方法精度对比与部署决策树在边缘计算和移动端部署场景中,模型量化已成为降低计算资源消耗、提升推理速度的关键技术。PyTorch 2.x 对量化工具链进行了全面升级,本文将深入解析三种训练后量化(PTQ&…

2026/7/7 2:07:52阅读更多 →
如何快速解锁中兴光猫权限:3步完成设备管理终极指南

如何快速解锁中兴光猫权限:3步完成设备管理终极指南

如何快速解锁中兴光猫权限:3步完成设备管理终极指南 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 你是否曾因光猫设备权限限制而感到困扰?无法深度配置网络&a…

2026/7/7 2:02:52阅读更多 →
2026撰写行业报告总写不完零散专业词汇?可系统梳理行业专业词汇

2026撰写行业报告总写不完零散专业词汇?可系统梳理行业专业词汇

"2026撰写行业报告,攒了一堆零散行业专业词汇理不清,越写越慢拖垮整个进度,这是我帮好几个做行业调研的朋友测工具的时候,最常碰到的痛点。核心问题不是你整理速度慢,是方法错了——要么靠手动堆,要么…

2026/7/7 2:02:52阅读更多 →
2026年点胶机该选谁?不同需求场景适配选型指南

2026年点胶机该选谁?不同需求场景适配选型指南

点胶机选型核心需求梳理方法点胶设备采购的适配性直接影响生产良率、产能效率与投入回报比,选型前完成系统的需求梳理,可避免盲目追求高参数或压低预算导致的设备错配,降低后续试错成本。核心需求梳理维度说明需求梳理可从5个核心维度展开&am…

2026/7/7 3:07:57阅读更多 →
AI第四次范式转移:从Prompt到Loop,普通人如何落地循环机制

AI第四次范式转移:从Prompt到Loop,普通人如何落地循环机制

文章目录前言🤔 Loop到底是个什么东西?🤖 它跟Agent有什么区别?🔥 为什么偏偏是现在火了?📈 范式迁移:控制粒度不断上移🛠️ 普通人怎么"Loop起来"&#xff1f…

2026/7/7 3:07:57阅读更多 →
知识的符合程度或者匹配程度度量方法

知识的符合程度或者匹配程度度量方法

针对“知识的符合程度或匹配程度”,学术界有多个专门的术语,具体取决于“知识”是指预设的规则/流程模型,还是指检索到的信息内容。结合企业工作流和资源服务背景,以下是三个最核心、最常用的学术术语:1. 符合度&#…

2026/7/7 3:07:57阅读更多 →
广告花得不算少,转化却被竞品压着打?这条 Amazon 宠物防滑袜 Listing 输在“没把双面防滑讲透”

广告花得不算少,转化却被竞品压着打?这条 Amazon 宠物防滑袜 Listing 输在“没把双面防滑讲透”

这是一家专做宠物用品的 Amazon 卖家,在美国站主推一款“老年犬防滑袜”。广告一直在跑,ACOS 也算可控,但一个现实问题始终摆在那:同类头部竞品的订单曲线稳步往上,他家的 Listing 却长期停在“不上不下”的区间。团队…

2026/7/7 3:07:57阅读更多 →
YOLO目标检测实战:从数据标注到模型部署完整指南

YOLO目标检测实战:从数据标注到模型部署完整指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 今天我们来完整走一遍从零开始训练自己的YOLO目标检测模型的全流程。无论你是计算机视觉新手还是有一定基础的开发者,这篇…

2026/7/7 3:07:57阅读更多 →
AI和集成电路怎么选?2026届新工科保研别把赛道规划搞反了

AI和集成电路怎么选?2026届新工科保研别把赛道规划搞反了

2026届推免准备进入关键阶段,很多新工科学生都会纠结一个问题:人工智能(AI)和集成电路(IC)都很热门,到底该往哪个方向规划?这两条赛道都属于近几年高校重点布局的新工科方向&#xf…

2026/7/7 3:02:57阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/6 4:26:20阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/7 2:56:31阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/7 1:03:28阅读更多 →
Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

1. 项目概述:Acunetix v24.8 高级版漏洞扫描器深度解析作为一名在网络安全领域摸爬滚打多年的老兵,我深知一款趁手的“兵器”对于安全测试工作意味着什么。今天要聊的,就是Web应用安全测试领域里一个响当当的名字——Acunetix。特别是其v24.8…

2026/7/7 0:02:41阅读更多 →
国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot) 🌐 演示地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCode:ruoyi-o…

2026/7/7 0:02:41阅读更多 →
CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS SSH连接故障排查:从基础检查到深度修复的完整指南引言当你尝试通过Xshell或其他SSH客户端连接CentOS服务器时,突然遭遇"Connection refused"或"Connection timed out"的错误提示,这种经历对任何运维人员或开发者来…

2026/7/7 0:02:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/6 4:45:01阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/6 4:45:01阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/6 4:45:03阅读更多 →