力扣 692:巧用小顶堆高效求解前K个高频单词
力扣 692巧用小顶堆高效求解前K个高频单词 前言Bilibili 同步视频 算法核心场景与解题痛点剖析1. 问题场景定义2. 传统解法弊端⚙️ 核心算法原理图文拆解1. 算法整体流程示意图Plain Text2. 分步原理深度解析✅ 第一步哈希表遍历精准统计词频✅ 第二步自定义小顶堆筛选TopK元素✅ 第三步二次规整排序输出标准结果 C 完整可运行代码实现⚡ 算法性能复杂度分析1. 时间复杂度2. 空间复杂度 拓展答疑与学习干货1. 可否用Map替代UnorderedMap2. 直接全局排序可行吗3. 堆排序是最优排序算法吗 编程学习核心感悟 总结 前言在算法刷题与工程开发之中词频统计、高频元素筛选是极为经典的核心场景✨。无论是文本数据分析、关键词提取、日志统计还是LeetCode经典算法题型前K个高频单词的求解思路都是程序员必须掌握的基础高阶算法思维。寻常解题之法多以暴力排序遍历虽逻辑直白却效率堪忧而哈希表统计频次 小顶堆筛选极值的组合解法兼顾时空复杂度优势章法严谨、思路精妙。本文将以骈文雅致之语层层拆解算法核心逻辑附完整C可运行代码、原理流程图解、细节易错点解析带你彻底吃透这一经典算法。Bilibili 同步视频力扣 692巧用小顶堆高效求解前K个高频单词 算法核心场景与解题痛点剖析1. 问题场景定义给定一组单词字符串数组与整数K需求为筛选出数组中出现频次最高的前K个单词排序规则严格遵循双优先级 第一优先级单词出现频次从高到低排序 第二优先级频次相同时按单词字典序从小到大排序2. 传统解法弊端若采用朴素思路先遍历统计所有单词频次再对全部单词直接排序虽可实现功能却存在显著缺陷❌数据量庞大时全局排序时间复杂度极高冗余计算过多无需对所有数据排序仅需保留前K个极值全局排序造成性能浪费是以业界最优解皆依托哈希表小顶堆的组合思想择优选取、去芜存菁以最低时间复杂度实现核心需求✅。⚙️ 核心算法原理图文拆解此番解题之术分三步行云流水、环环相扣哈希表统计词频 → 小顶堆筛选前K元素 → 结果二次规整排序层层递进、逻辑闭环。1. 算法整体流程示意图Plain Text原始单词数组 → 哈希表遍历统计 → 生成【单词-频次】映射关系 ↓ 构建自定义规则小顶堆 → 逐个插入单词元素 → 堆超K则弹出最小值低频单词 ↓ 堆内留存TopK高频单词 → 按题目双规则二次排序 → 输出最终有序结果2. 分步原理深度解析✅ 第一步哈希表遍历精准统计词频天下算法统计为先万物有序数据为基。想要筛选高频单词必先量化每个单词的出现次数。哈希表Hash Map凭借O(1)级别的增删查改效率成为词频统计的最优数据结构。我们以单词为键key、出现频次为值value遍历原始单词数组逐一对对应单词的频次进行累加最终得到所有单词的完整频次映射关系。此步核心要义去重统计、精准量化将无序的原始文本数据转化为结构化的频次数据为后续筛选排序筑牢根基。✅ 第二步自定义小顶堆筛选TopK元素求前K大极值必用小顶堆求前K小极值必用大顶堆。此为算法解题亘古不变的核心准则。为何舍弃大顶堆而选用小顶堆缘由精妙小顶堆堆顶始终为当前堆内最小值元素遍历插入所有单词时若堆中元素数量超出K值直接弹出堆顶低频元素全程保留最优的K个高频单词无需存储全部数据极大节省内存空间。且本题需自定义堆排序规则双维度约束、精准适配题意频次不等频次更高的单词优先级更高频次相等字典序更小的单词优先级更高✅ 第三步二次规整排序输出标准结果小顶堆筛选完成后堆内元素为前K个高频单词但堆结构本身无法保证全局有序。是以最后需对留存元素再次按照「频次降序、字典序升序」的规则排序最终输出完全符合题意的有序结果。 C 完整可运行代码实现依托上述原理结合C STL容器特性编写完整版高效代码注释详尽、可直接编译运行适配各类刷题场景与工程测试#includeiostream#includevector#includeunordered_map#includequeue#includealgorithmusingnamespacestd;// 自定义比较规则适配小顶堆排序逻辑structCMP{// 存储单词与对应频次pairstring,intval;CMP(pairstring,intv):val(v){}// 重载比较运算符构建符合题意的排序规则booloperator(constCMPother)const{// 频次不同频次低的优先弹出小顶堆核心if(val.second!other.val.second){returnval.secondother.val.second;}// 频次相同字典序大的优先弹出保留字典序小的单词returnval.firstother.val.first;}};vectorstringtopKFrequent(vectorstringwords,intk){// 1. 哈希表统计所有单词频次 O(n)unordered_mapstring,intfrequency;for(string word:words){frequency[word];}// 2. 构建自定义小顶堆priority_queueCMPminHeap;for(autoitem:frequency){minHeap.push(CMP(item));// 堆元素超过K弹出频次最小/字典序最大的元素if(minHeap.size()k){minHeap.pop();}}// 3. 提取堆内结果二次规整排序vectorpairstring,inttempRes;while(!minHeap.empty()){tempRes.push_back(minHeap.top().val);minHeap.pop();}// 最终排序频次降序同频次字典序升序sort(tempRes.begin(),tempRes.end(),[](pairstring,inta,pairstring,intb){if(a.second!b.second){returna.secondb.second;}returna.firstb.first;});// 提取最终单词结果vectorstringres;for(autoitem:tempRes){res.push_back(item.first);}returnres;}// 测试主函数intmain(){vectorstringtestWords{i,love,leetcode,i,love,coding};intk2;vectorstringresulttopKFrequent(testWords,k);cout前k个高频单词endl;for(string word:result){coutword ;}return0;}⚡ 算法性能复杂度分析算法之优劣必以时空复杂度为标尺此番解法性能优异、适配海量数据场景1. 时间复杂度词频统计遍历所有单词耗时O(n)n为单词总数堆筛选每个元素入堆、出堆操作耗时 O(logK)总耗时O(nlogK)结果排序仅对K个元素排序耗时O(KlogK)整体复杂度O(nlogK)远优于全局排序的 O(nlogn)2. 空间复杂度哈希表存储所有不重复单词空间 O(m)m为不重复单词数小顶堆仅存储K个元素空间 O(K)整体空间复杂度O(m K)内存占用可控、轻量化高效 拓展答疑与学习干货1. 可否用Map替代UnorderedMap可也但非最优✨。ordered map有序map可自动维护键值有序性但其底层为红黑树增删查改效率低于哈希表。本题无需预处理数据有序性unordered_map 哈希表的无序存储特性更贴合高效统计的核心需求冗余开销更低。2. 直接全局排序可行吗可行但低效❌。全局排序依旧需要先通过哈希表统计词频并未省略核心步骤且海量数据下全局排序的时间开销远大于堆筛选数据量级越大性能差距越明显。3. 堆排序是最优排序算法吗非也。在专业算法与数据结构体系中存在多种优于堆排序、快速排序的高阶排序算法。算法学习的核心不在于死记排序模板而在于掌握场景适配思维——按需择取最优解法方为算法之道。 编程学习核心感悟算法之力为思维之魂代码之力为落地之躯。二者看似独立实则相辅相成、共生共长算法思维决定解题高度代码功底决定落地精度。听课求学重在参悟解题逻辑、搭建思维框架而非拘泥于单一语言的代码细节技能精进贵在躬身实操、线下深耕而非浅尝辄止、线上虚学。C语法晦涩精妙非一书可尽学需多册典籍相辅、千行代码沉淀方能融会贯通、运用自如✨。 总结前K个高频单词的解法以哈希表统计、小顶堆筛选、自定义排序为三重核心化繁为简、去冗存精。相较于暴力排序此算法极大优化时空复杂度是极值类算法场景的经典范式。吃透此番逻辑不仅可秒杀刷题题型更能迁移应用于文本统计、数据筛选、流量分析等各类工程场景切实提升算法思维与代码实战能力

相关新闻

大模型技术 提示词模板 概述

大模型技术 提示词模板 概述

在 LangChain 中,提示词模板(Prompt Template) 是构建大模型应用的核心基石。如果把大模型比作一个“极其聪明但没有记忆的员工”,那么提示词模板就是一份标准化的“工作指南”。它将用户的动态输入与预设的指令、上下文、格式要求…

2026/8/3 3:38:37 阅读更多 →
Agent 设计及实现 demo

Agent 设计及实现 demo

智能体(Agent)系统抽象架构设计文档1. 模型抽象(Model Abstraction)作为 Agent 的“大脑皮层”,本层负责屏蔽不同大模型厂商的 API 差异,提供统一的调用接口。Function Call 标准化:统一解析 Op…

2026/8/3 3:38:37 阅读更多 →
硬件电路可靠性验证:环路稳定性与温升测试的工程实践指南

硬件电路可靠性验证:环路稳定性与温升测试的工程实践指南

这次我们来看一个硬件电路设计中的核心实践话题:环路稳定性与温升测试。对于电源工程师、硬件开发者和电子爱好者来说,这两个测试是评估电路可靠性、确保产品长期稳定工作的关键环节。它不是某个具体的开源软件项目,而是一套必须掌握的工程验…

2026/8/4 5:20:06 阅读更多 →

最新新闻

【豆包智能体开发实战指南】:从零搭建高转化率AI智能体的7大核心步骤

【豆包智能体开发实战指南】:从零搭建高转化率AI智能体的7大核心步骤

更多请点击: https://kaifayun.com 第一章:豆包智能体开发实战入门 豆包(Doubao)是字节跳动推出的智能助手平台,支持开发者通过「智能体(Agent)」形式构建可交互、可扩展的AI应用。本章聚焦零基…

2026/8/4 13:34:56 阅读更多 →
计算机毕业设计之大学生社团管理系统

计算机毕业设计之大学生社团管理系统

随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,大学生社团管理系统当然也不能排除在外,从社团信息、社团活动的统计和分析,在过程中会产生大量的、各种…

2026/8/4 13:34:56 阅读更多 →
【紧急预警】生成式AI越权访问漏洞已被APT组织 weaponized——你的AI应用是否仍在裸奔?

【紧急预警】生成式AI越权访问漏洞已被APT组织 weaponized——你的AI应用是否仍在裸奔?

更多请点击: https://kaifayun.com 第一章:【紧急预警】生成式AI越权访问漏洞已被APT组织 weaponized——你的AI应用是否仍在裸奔? 近期,多个国家级APT组织已将生成式AI系统中的越权访问漏洞(CVE-2024-35247&#xff…

2026/8/4 13:34:56 阅读更多 →
本地大模型部署实战(5):vLLM 高吞吐推理服务部署

本地大模型部署实战(5):vLLM 高吞吐推理服务部署

前四篇解决单机可用性,本篇转向多人并发。vLLM 通过连续批处理与 PagedAttention 提升吞吐,并直接提供 OpenAI 兼容服务。 一、痛点:从可验收约束看主题风险 本地部署最容易犯的错,是先复制一条启动命令,失败后才猜是…

2026/8/4 13:34:56 阅读更多 →
开源面部分析工具OpenFace 2.2.0:5大技术优势解析与计算机视觉实践指南

开源面部分析工具OpenFace 2.2.0:5大技术优势解析与计算机视觉实践指南

开源面部分析工具OpenFace 2.2.0:5大技术优势解析与计算机视觉实践指南 【免费下载链接】OpenFace OpenFace – a state-of-the art tool intended for facial landmark detection, head pose estimation, facial action unit recognition, and eye-gaze estimation…

2026/8/4 13:34:56 阅读更多 →
5 分钟接入 GPT-5.6 完整指南

5 分钟接入 GPT-5.6 完整指南

第一步:注册账号(1 分钟)访问比较稳定的API中转站点击右上角 注册 按钮填写邮箱和密码,完成注册登录后进入管理后台💡 新用户注册即送免费额度,可以直接体验 API 调用。第二步:获取 API Key&…

2026/8/4 13:33:56 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/3 13:07:03 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/3 8:27:36 阅读更多 →