力扣 692:巧用小頂堆高效求解前K個(gè)高頻單詞
力扣 692巧用小頂堆高效求解前K個(gè)高頻單詞 前言Bilibili 同步視頻 算法核心場(chǎng)景與解題痛點(diǎn)剖析1. 問(wèn)題場(chǎng)景定義2. 傳統(tǒng)解法弊端?? 核心算法原理圖文拆解1. 算法整體流程示意圖Plain Text2. 分步原理深度解析? 第一步哈希表遍歷精準(zhǔn)統(tǒng)計(jì)詞頻? 第二步自定義小頂堆篩選TopK元素? 第三步二次規(guī)整排序輸出標(biāo)準(zhǔn)結(jié)果 C 完整可運(yùn)行代碼實(shí)現(xiàn)? 算法性能復(fù)雜度分析1. 時(shí)間復(fù)雜度2. 空間復(fù)雜度 拓展答疑與學(xué)習(xí)干貨1. 可否用Map替代UnorderedMap2. 直接全局排序可行嗎3. 堆排序是最優(yōu)排序算法嗎 編程學(xué)習(xí)核心感悟 總結(jié) 前言在算法刷題與工程開(kāi)發(fā)之中詞頻統(tǒng)計(jì)、高頻元素篩選是極為經(jīng)典的核心場(chǎng)景?。無(wú)論是文本數(shù)據(jù)分析、關(guān)鍵詞提取、日志統(tǒng)計(jì)還是LeetCode經(jīng)典算法題型前K個(gè)高頻單詞的求解思路都是程序員必須掌握的基礎(chǔ)高階算法思維。尋常解題之法多以暴力排序遍歷雖邏輯直白卻效率堪憂而哈希表統(tǒng)計(jì)頻次 小頂堆篩選極值的組合解法兼顧時(shí)空復(fù)雜度優(yōu)勢(shì)章法嚴(yán)謹(jǐn)、思路精妙。本文將以駢文雅致之語(yǔ)層層拆解算法核心邏輯附完整C可運(yùn)行代碼、原理流程圖解、細(xì)節(jié)易錯(cuò)點(diǎn)解析帶你徹底吃透這一經(jīng)典算法。Bilibili 同步視頻力扣 692巧用小頂堆高效求解前K個(gè)高頻單詞 算法核心場(chǎng)景與解題痛點(diǎn)剖析1. 問(wèn)題場(chǎng)景定義給定一組單詞字符串?dāng)?shù)組與整數(shù)K需求為篩選出數(shù)組中出現(xiàn)頻次最高的前K個(gè)單詞排序規(guī)則嚴(yán)格遵循雙優(yōu)先級(jí) 第一優(yōu)先級(jí)單詞出現(xiàn)頻次從高到低排序 第二優(yōu)先級(jí)頻次相同時(shí)按單詞字典序從小到大排序2. 傳統(tǒng)解法弊端若采用樸素思路先遍歷統(tǒng)計(jì)所有單詞頻次再對(duì)全部單詞直接排序雖可實(shí)現(xiàn)功能卻存在顯著缺陷?數(shù)據(jù)量龐大時(shí)全局排序時(shí)間復(fù)雜度極高冗余計(jì)算過(guò)多無(wú)需對(duì)所有數(shù)據(jù)排序僅需保留前K個(gè)極值全局排序造成性能浪費(fèi)是以業(yè)界最優(yōu)解皆依托哈希表小頂堆的組合思想擇優(yōu)選取、去蕪存菁以最低時(shí)間復(fù)雜度實(shí)現(xiàn)核心需求?。?? 核心算法原理圖文拆解此番解題之術(shù)分三步行云流水、環(huán)環(huán)相扣哈希表統(tǒng)計(jì)詞頻 → 小頂堆篩選前K元素 → 結(jié)果二次規(guī)整排序?qū)訉舆f進(jìn)、邏輯閉環(huán)。1. 算法整體流程示意圖Plain Text原始單詞數(shù)組 → 哈希表遍歷統(tǒng)計(jì) → 生成【單詞-頻次】映射關(guān)系 ↓ 構(gòu)建自定義規(guī)則小頂堆 → 逐個(gè)插入單詞元素 → 堆超K則彈出最小值低頻單詞 ↓ 堆內(nèi)留存TopK高頻單詞 → 按題目雙規(guī)則二次排序 → 輸出最終有序結(jié)果2. 分步原理深度解析? 第一步哈希表遍歷精準(zhǔn)統(tǒng)計(jì)詞頻天下算法統(tǒng)計(jì)為先萬(wàn)物有序數(shù)據(jù)為基。想要篩選高頻單詞必先量化每個(gè)單詞的出現(xiàn)次數(shù)。哈希表Hash Map憑借O(1)級(jí)別的增刪查改效率成為詞頻統(tǒng)計(jì)的最優(yōu)數(shù)據(jù)結(jié)構(gòu)。我們以單詞為鍵key、出現(xiàn)頻次為值value遍歷原始單詞數(shù)組逐一對(duì)對(duì)應(yīng)單詞的頻次進(jìn)行累加最終得到所有單詞的完整頻次映射關(guān)系。此步核心要義去重統(tǒng)計(jì)、精準(zhǔn)量化將無(wú)序的原始文本數(shù)據(jù)轉(zhuǎn)化為結(jié)構(gòu)化的頻次數(shù)據(jù)為后續(xù)篩選排序筑牢根基。? 第二步自定義小頂堆篩選TopK元素求前K大極值必用小頂堆求前K小極值必用大頂堆。此為算法解題亙古不變的核心準(zhǔn)則。為何舍棄大頂堆而選用小頂堆緣由精妙小頂堆堆頂始終為當(dāng)前堆內(nèi)最小值元素遍歷插入所有單詞時(shí)若堆中元素?cái)?shù)量超出K值直接彈出堆頂?shù)皖l元素全程保留最優(yōu)的K個(gè)高頻單詞無(wú)需存儲(chǔ)全部數(shù)據(jù)極大節(jié)省內(nèi)存空間。且本題需自定義堆排序規(guī)則雙維度約束、精準(zhǔn)適配題意頻次不等頻次更高的單詞優(yōu)先級(jí)更高頻次相等字典序更小的單詞優(yōu)先級(jí)更高? 第三步二次規(guī)整排序輸出標(biāo)準(zhǔn)結(jié)果小頂堆篩選完成后堆內(nèi)元素為前K個(gè)高頻單詞但堆結(jié)構(gòu)本身無(wú)法保證全局有序。是以最后需對(duì)留存元素再次按照「頻次降序、字典序升序」的規(guī)則排序最終輸出完全符合題意的有序結(jié)果。 C 完整可運(yùn)行代碼實(shí)現(xiàn)依托上述原理結(jié)合C STL容器特性編寫(xiě)完整版高效代碼注釋詳盡、可直接編譯運(yùn)行適配各類(lèi)刷題場(chǎng)景與工程測(cè)試#includeiostream#includevector#includeunordered_map#includequeue#includealgorithmusingnamespacestd;// 自定義比較規(guī)則適配小頂堆排序邏輯structCMP{// 存儲(chǔ)單詞與對(duì)應(yīng)頻次pairstring,intval;CMP(pairstring,intv):val(v){}// 重載比較運(yùn)算符構(gòu)建符合題意的排序規(guī)則booloperator(constCMPother)const{// 頻次不同頻次低的優(yōu)先彈出小頂堆核心if(val.second!other.val.second){returnval.secondother.val.second;}// 頻次相同字典序大的優(yōu)先彈出保留字典序小的單詞returnval.firstother.val.first;}};vectorstringtopKFrequent(vectorstringwords,intk){// 1. 哈希表統(tǒng)計(jì)所有單詞頻次 O(n)unordered_mapstring,intfrequency;for(string word:words){frequency[word];}// 2. 構(gòu)建自定義小頂堆priority_queueCMPminHeap;for(autoitem:frequency){minHeap.push(CMP(item));// 堆元素超過(guò)K彈出頻次最小/字典序最大的元素if(minHeap.size()k){minHeap.pop();}}// 3. 提取堆內(nèi)結(jié)果二次規(guī)整排序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;});// 提取最終單詞結(jié)果vectorstringres;for(autoitem:tempRes){res.push_back(item.first);}returnres;}// 測(cè)試主函數(shù)intmain(){vectorstringtestWords{i,love,leetcode,i,love,coding};intk2;vectorstringresulttopKFrequent(testWords,k);cout前k個(gè)高頻單詞endl;for(string word:result){coutword ;}return0;}? 算法性能復(fù)雜度分析算法之優(yōu)劣必以時(shí)空復(fù)雜度為標(biāo)尺此番解法性能優(yōu)異、適配海量數(shù)據(jù)場(chǎng)景1. 時(shí)間復(fù)雜度詞頻統(tǒng)計(jì)遍歷所有單詞耗時(shí)O(n)n為單詞總數(shù)堆篩選每個(gè)元素入堆、出堆操作耗時(shí) O(logK)總耗時(shí)O(nlogK)結(jié)果排序僅對(duì)K個(gè)元素排序耗時(shí)O(KlogK)整體復(fù)雜度O(nlogK)遠(yuǎn)優(yōu)于全局排序的 O(nlogn)2. 空間復(fù)雜度哈希表存儲(chǔ)所有不重復(fù)單詞空間 O(m)m為不重復(fù)單詞數(shù)小頂堆僅存儲(chǔ)K個(gè)元素空間 O(K)整體空間復(fù)雜度O(m K)內(nèi)存占用可控、輕量化高效 拓展答疑與學(xué)習(xí)干貨1. 可否用Map替代UnorderedMap可也但非最優(yōu)?。ordered map有序map可自動(dòng)維護(hù)鍵值有序性但其底層為紅黑樹(shù)增刪查改效率低于哈希表。本題無(wú)需預(yù)處理數(shù)據(jù)有序性u(píng)nordered_map 哈希表的無(wú)序存儲(chǔ)特性更貼合高效統(tǒng)計(jì)的核心需求冗余開(kāi)銷(xiāo)更低。2. 直接全局排序可行嗎可行但低效?。全局排序依舊需要先通過(guò)哈希表統(tǒng)計(jì)詞頻并未省略核心步驟且海量數(shù)據(jù)下全局排序的時(shí)間開(kāi)銷(xiāo)遠(yuǎn)大于堆篩選數(shù)據(jù)量級(jí)越大性能差距越明顯。3. 堆排序是最優(yōu)排序算法嗎非也。在專業(yè)算法與數(shù)據(jù)結(jié)構(gòu)體系中存在多種優(yōu)于堆排序、快速排序的高階排序算法。算法學(xué)習(xí)的核心不在于死記排序模板而在于掌握?qǐng)鼍斑m配思維——按需擇取最優(yōu)解法方為算法之道。 編程學(xué)習(xí)核心感悟算法之力為思維之魂代碼之力為落地之軀。二者看似獨(dú)立實(shí)則相輔相成、共生共長(zhǎng)算法思維決定解題高度代碼功底決定落地精度。聽(tīng)課求學(xué)重在參悟解題邏輯、搭建思維框架而非拘泥于單一語(yǔ)言的代碼細(xì)節(jié)技能精進(jìn)貴在躬身實(shí)操、線下深耕而非淺嘗輒止、線上虛學(xué)。C語(yǔ)法晦澀精妙非一書(shū)可盡學(xué)需多冊(cè)典籍相輔、千行代碼沉淀方能融會(huì)貫通、運(yùn)用自如?。 總結(jié)前K個(gè)高頻單詞的解法以哈希表統(tǒng)計(jì)、小頂堆篩選、自定義排序?yàn)槿睾诵幕睘楹?jiǎn)、去冗存精。相較于暴力排序此算法極大優(yōu)化時(shí)空復(fù)雜度是極值類(lèi)算法場(chǎng)景的經(jīng)典范式。吃透此番邏輯不僅可秒殺刷題題型更能遷移應(yīng)用于文本統(tǒng)計(jì)、數(shù)據(jù)篩選、流量分析等各類(lèi)工程場(chǎng)景切實(shí)提升算法思維與代碼實(shí)戰(zhàn)能力

相關(guān)新聞

大模型技術(shù) 提示詞模板 概述

大模型技術(shù) 提示詞模板 概述

在 LangChain 中,提示詞模板(Prompt Template) 是構(gòu)建大模型應(yīng)用的核心基石。如果把大模型比作一個(gè)“極其聰明但沒(méi)有記憶的員工”,那么提示詞模板就是一份標(biāo)準(zhǔn)化的“工作指南”。它將用戶的動(dòng)態(tài)輸入與預(yù)設(shè)的指令、上下文、格式要求…

2026/8/3 3:38:26 閱讀更多
Agent 設(shè)計(jì)及實(shí)現(xiàn) demo

Agent 設(shè)計(jì)及實(shí)現(xiàn) demo

智能體(Agent)系統(tǒng)抽象架構(gòu)設(shè)計(jì)文檔1. 模型抽象(Model Abstraction)作為 Agent 的“大腦皮層”,本層負(fù)責(zé)屏蔽不同大模型廠商的 API 差異,提供統(tǒng)一的調(diào)用接口。Function Call 標(biāo)準(zhǔn)化:統(tǒng)一解析 Op…

2026/8/3 3:38:26 閱讀更多
AI一鍵翻譯驗(yàn)證所有語(yǔ)種UI截?cái)?,把LQA周期從7天干到20分鐘

AI一鍵翻譯驗(yàn)證所有語(yǔ)種UI截?cái)?,把LQA周期從7天干到20分鐘

關(guān)注 霍格沃茲軟件測(cè)試開(kāi)發(fā) 公眾號(hào),回復(fù)「資料」, 領(lǐng)取人工智能測(cè)試開(kāi)發(fā)技術(shù)合集 從巴西葡語(yǔ)到印尼語(yǔ),32種語(yǔ)言再也不用手動(dòng)翻頁(yè)面了 大家好,我是快手國(guó)際化業(yè)務(wù)質(zhì)量保障團(tuán)隊(duì)的一名技術(shù)負(fù)責(zé)人,負(fù)責(zé)Kwai海外版的本地化質(zhì)量保障工作…

2026/8/3 3:28:25 閱讀更多
企微SCRM系統(tǒng)核心功能與實(shí)施指南

企微SCRM系統(tǒng)核心功能與實(shí)施指南

1. 企微SCRM系統(tǒng)概述企微SCRM(Social Customer Relationship Management)是基于企業(yè)微信生態(tài)構(gòu)建的客戶關(guān)系管理系統(tǒng)。這套系統(tǒng)將傳統(tǒng)CRM功能與企業(yè)微信的社交屬性深度融合,形成了獨(dú)特的私域流量運(yùn)營(yíng)解決方案。作為目前國(guó)內(nèi)企業(yè)最主流的客戶運(yùn)…

2026/8/3 4:28:27 閱讀更多
C++迭代器:STL容器統(tǒng)一訪問(wèn)接口的設(shè)計(jì)與實(shí)現(xiàn)

C++迭代器:STL容器統(tǒng)一訪問(wèn)接口的設(shè)計(jì)與實(shí)現(xiàn)

1. 迭代器:C容器封裝的統(tǒng)一接口藝術(shù)在C標(biāo)準(zhǔn)模板庫(kù)(STL)的設(shè)計(jì)哲學(xué)中,迭代器(iterator)扮演著連接算法與容器的橋梁角色。這種精妙的設(shè)計(jì)使得我們可以用相同的方式遍歷vector、list、map等完全不同的數(shù)據(jù)結(jié)構(gòu),這正是標(biāo)題中"行為統(tǒng)一"…

2026/8/3 4:28:27 閱讀更多
鴻蒙系統(tǒng)進(jìn)程與線程管理機(jī)制解析

鴻蒙系統(tǒng)進(jìn)程與線程管理機(jī)制解析

1. 鴻蒙系統(tǒng)中的進(jìn)程與線程基礎(chǔ)概念在鴻蒙(HarmonyOS)這個(gè)分布式操作系統(tǒng)中,進(jìn)程和線程作為系統(tǒng)資源調(diào)度的基本單位,其設(shè)計(jì)理念與傳統(tǒng)操作系統(tǒng)既有相似之處又有顯著差異。鴻蒙采用微內(nèi)核架構(gòu),這使得它的進(jìn)程管理機(jī)制比…

2026/8/3 4:28:27 閱讀更多
青龍面板獲取京東Cookie全攻略:原理、方法與安全實(shí)踐

青龍面板獲取京東Cookie全攻略:原理、方法與安全實(shí)踐

1. 項(xiàng)目概述:為什么我們需要獲取京東Cookie?如果你正在折騰青龍面板,想跑一些自動(dòng)簽到、領(lǐng)京豆、做任務(wù)的腳本,那么“獲取京東Cookie”就是你繞不開(kāi)的第一道坎。這聽(tīng)起來(lái)像是一個(gè)簡(jiǎn)單的技術(shù)操作,但背后涉及到的&#x…

2026/8/3 4:28:27 閱讀更多
全球僅7家廠商通過(guò)ISO/IEC 27001認(rèn)證的名片AI引擎,我們逆向拆解了它的字段置信度熔斷機(jī)制

全球僅7家廠商通過(guò)ISO/IEC 27001認(rèn)證的名片AI引擎,我們逆向拆解了它的字段置信度熔斷機(jī)制

更多請(qǐng)點(diǎn)擊: https://kaifayun.com 第一章:全球僅7家廠商通過(guò)ISO/IEC 27001認(rèn)證的名片AI引擎概覽 名片AI引擎是企業(yè)級(jí)智能文檔處理的核心組件,專注于高精度OCR、語(yǔ)義結(jié)構(gòu)化提取與跨語(yǔ)言實(shí)體對(duì)齊。截至2024年第三季度,全球范圍內(nèi)僅…

2026/8/3 0:07:47 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類(lèi)短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢(qián)從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/2 2:52:49 閱讀更多