前k個高頻單詞(C++實現)

前k個高頻單詞

  • 題目
  • 思路
  • 代碼
  • 代碼講解

題目

在這里插入圖片描述


思路

通過統計字符串的出現次數,并根據出現次數和字典序對字符串進行排序,找出出現頻率最高的前k個字符串。使用一個自定義的仿函數作為排序的比較函數,通過map容器進行統計,然后將結果存儲在向量中返回


代碼

 //仿函數struct kvCom{bool operator()(const pair<string,int>& p1,const pair<string,int>& p2){return p1.second>p2.second || (p1.second==p2.second && p1.first<p2.first);}};vector<string> topKFrequent(vector<string>& words, int k) {map<string,int> CountMap ;for (auto &e : words){CountMap[e]++;}//sort中的支持的是隨機迭代器,而map是雙向迭代器,所有將map中的數據存到vector中再用sortvector<pair<string,int>> sortV(CountMap.begin(),CountMap.end());//穩定的sort//stable_sort(sortV.begin(),sortV.end(),kvCom());sort(sortV.begin(),sortV.end(),kvCom());//對次數排序vector<string> ret;for (int i=0;i<k;i++){ret.push_back(sortV[i].first);}return ret;}

代碼講解

 struct kvCom{bool operator()(const pair<string,int>& p1,const pair<string,int>& p2){return p1.second>p2.second || (p1.second==p2.second && p1.first<p2.first);}};
  • struct kvCom:定義了一個結構體kvCom,它是一個仿函數(function object)。仿函數是重載了函數調用操作符operator()的對象,可以像函數一樣被調用。在這個結構體中,重載了operator(),用于定義對存儲字符串-整數對的pair進行比較的規則。
  • bool operator()(const pair<string,int>& p1,const pair<string,int>& p2):這是kvCom結構體中的函數調用操作符的重載。它接受兩個參數,都是pair<string,int>類型的引用。函數的目的是比較這兩個pair對象的大小,返回一個布爾值表示兩個對象的大小關系。具體的比較規則如下:
    首先比較第二個元素(即整數部分)的大小,如果p1的第二個元素大于p2的第二個元素,則返回true,否則返回false。
    如果兩個元素的第二個元素相等,那么比較第一個元素(即字符串部分)的大小,如果p1的第一個元素小于p2的第一個元素,則返回true,否則返回false。
vector<string> topKFrequent(vector<string>& words, int k) {map<string,int> CountMap ;for (auto &e : words){CountMap[e]++;}//sort中的支持的是隨機迭代器,而map是雙向迭代器,所有將map中的數據存到vector中再用sortvector<pair<string,int>> sortV(CountMap.begin(),CountMap.end());//穩定的sort//stable_sort(sortV.begin(),sortV.end(),kvCom());sort(sortV.begin(),sortV.end(),kvCom());//對次數排序vector<string> ret;for (int i=0;i<k;i++){ret.push_back(sortV[i].first);}return ret;}
  • map<string,int> CountMap:定義了一個map容器CountMap,用于統計每個字符串在words中出現的次數。map是一個關聯容器,它存儲了鍵-值對,其中鍵是唯一的,即每個字符串只會在map中出現一次,值表示字符串出現的次數。
  • for (auto &e : words):遍歷words中的每個字符串,使用引用&e來獲取字符串的引用。這樣可以避免在循環中對字符串進行拷貝,提高性能。
  • CountMap[e]++:將當前遍歷到的字符串e作為鍵,在CountMap中查找對應的值,并將其加1。如果e在CountMap中不存在,則會自動插入一個鍵為e,值為0的鍵-值對,然后將值加1。
  • vector<pair<string,int>> sortV(CountMap.begin(),CountMap.end()):sort中的支持的是隨機迭代器,而map是雙向迭代器,所有將map中的數據存到vector中再用sort。使用CountMap中的數據初始化一個存儲字符串-整數對的sortV。這樣做是為了將CountMap中的數據按照出現次數進行排序。
  • sort(sortV.begin(),sortV.end(),kvCom()):對sortV中的元素按照指定的排序規則進行排序。這里使用了kvCom結構體的對象作為比較函數,用來定義排序規則。排序的規則是按照字符串出現次數的降序排列,如果出現次數相同,則按照字符串的字典序(升序)進行排列。
  • vector ret:定義一個字符串向量ret,用于存儲結果。
  • for (int i=0;i<k;i++):從排序后的向量sortV中取出前k個字符串。
  • ret.push_back(sortV[i].first):將第i個字符串的第一個元素(即字符串本身)添加到結果向量ret中。
  • return ret:返回存儲了出現頻率最高的前k個字符串的向量ret。

(本題完)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166330.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166330.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166330.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux:strace 簡介

文章目錄 1. 前言2. 什么是 strace ?3. 使用 strace3.1 追蹤指定進程3.1.1 通過程序名追蹤進程3.1.2 通過 進程 ID (PID) 追蹤程序3.1.3 追蹤 子進程 或 線程 3.2 系統調用情況統計3.3 追蹤過濾3.3.1 追蹤指定的系統調用集合3.3.2 追蹤對指定文件句柄集合操作的系統調用3.3.3 …

前端已死?看看我的秋招上岸歷程

背景 求職方向&#xff1a;web前端 技術棧&#xff1a;vue2、springboot&#xff08;學校開過課&#xff0c;簡單的學習過&#xff09; 實習經歷&#xff1a;兩段&#xff0c;但都是實訓類的&#xff0c;說白了就是類似培訓&#xff0c;每次面試官問起時我也會坦誠交代&…

關于鴻蒙網絡請求的問題

https://developer.huawei.com/consumer/cn/forum/topic/0204136145853212268?fid0102683795438680754 鴻蒙OS 代碼 import http from ohos.net.http;export const httpUtils (url: string, data: any) > {return new Promise((resolve, reject) > {let httpRequest …

創意設計與個性化定制:酒精壁爐的獨特之處

在當今家居裝飾的潮流中&#xff0c;人們越來越注重個性化和創意&#xff0c;而酒精壁爐正是在這一趨勢中嶄露頭角。它不僅成為家居的溫馨之選&#xff0c;更因其設計的靈活性而成為創意焦點&#xff0c;吸引了越來越多注重家居設計的人群。 酒精壁爐的設計靈活性為家居注入了新…

vue的package.json詳細說明

前言 package.json 文件是一個非常重要的文件,它用于存儲關于項目的元信息以及依賴項。在 Vue.js 項目中,package.json 文件描述了項目的名稱、版本、描述、作者、依賴項、腳本命令等信息。 說明 package.json 文件常見的 詳細說明: 1.名稱 (name): 項目的名稱。遵循反向…

工作流引擎架構設計

一個應用MIS的系統的架構離不開工作流引擎&#xff0c;具有流程引擎思維的架構人員設計系統的時候就有流程的思維&#xff0c;他區別于過程思維&#xff0c;過程思維開發出來的系統&#xff0c;用戶面對的是菜單、模塊。而流程思維設計出來的系統就是發起、待辦、在途、查詢、近…

SELinux refpolicy詳解(2)

接前一篇文章:SELinux refpolicy詳解(1) 本文內容引自: Documentation SELinuxProject/refpolicy Wiki GitHub 4. 入門指南 文檔是參考策略的主要目標之一。入門指南(https://github.com/SELinuxProject/refpolicy/wiki/GettingStarted)提供了有關編寫參考策略模塊的…

關于vue3項目中 vite.config.js項目配置 多個請求地址代理配置

關于VUE3 vite.config.js文件配置相關 提示&#xff1a;本文記錄了我們項目中使用到了多個不同的接口請求前綴地址配置代理&#xff0c;如果有更好的優化方案歡迎大佬指點呀&#xff1a; 以下是我最近項目中的vite.config.js文件配置&#xff0c;由于剛開始vue3不久&#xff…

JS 類型轉換機制

這篇寫得不錯&#xff1a; 百度安全驗證 包括顯示轉換&#xff08;就是調用函數&#xff09;、隱式轉換&#xff08;運算符 - 時自動轉換成數字/字符串&#xff09; 注意到&#xff1a; abc-1 //NaN 非法字符轉換為數字 結果是NaN

LeetCode 1410. HTML 實體解析器:字符串匹配

【LetMeFly】1410.HTML 實體解析器&#xff1a;字符串匹配 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/html-entity-parser/ 「HTML 實體解析器」 是一種特殊的解析器&#xff0c;它將 HTML 代碼作為輸入&#xff0c;并用字符本身替換掉所有這些特殊的字符實體。…

【點云surface】基于多項式重建的平滑和法線估計

1 介紹 基于多項式重建的平滑和法線估計&#xff08;Smoothing and normal estimation based on polynomial reconstruction&#xff09;是一種常用的點云處理方法&#xff0c;用于平滑點云數據并估計每個點的法線信息。 該方法基于Moving Least Squares&#xff08;MLS&…

docker安裝nacos,實現和mysql容器的通信

1.下載nacos鏡像 docker pull nacos/nacos-server2. 啟動nacos 啟動命令如下&#xff1a; docker run -d -p 8848:8848 --name nacos \ -e JVM_XMS256m \ -e JVM_XMX256m \ -e MODEstandalone \ -e SPRING_DATASOURCE_PLATFORMmysql \ -e MYSQL_SERVICE_HOST192.168.131.223…

連接的原理(待修改)

搞數據庫?個避不開的概念就是Join&#xff0c;翻譯成中?就是連接。 相信很多?伙伴在初學連接的時候有些?臉懵逼&#xff0c;理解了連接的語義之后?可能不明?各個表中的記 錄到底是怎么連起來的&#xff0c;以?于在使?的時候常常陷?下邊兩種誤區&#xff1a; 誤區?&…

linux磁盤清理

目錄 排查過程1、查看磁盤占用情況2. 按照占用大小進行倒排-當前目錄及其子目錄3.當前目錄磁盤占用情況 清理命令 排查過程 1、查看磁盤占用情況 df -hdf -h 命令用于顯示磁盤空間的使用情況&#xff0c;以人類可讀的方式呈現&#xff0c;其中&#xff1a;df 是 “disk free”…

“AI就緒”新計劃,亞馬遜云科技到2025年向200萬人提供免費AI技能培訓

AI就緒&#xff08;AI Ready&#xff09;計劃 到2025年為全球200萬人提供 免費人工智能&#xff08;AI&#xff09;技能培訓和教育資源 亞馬遜云科技宣布啟動“AI就緒&#xff08;AI Ready&#xff09;”計劃&#xff0c;旨在到2025年為全球200萬人提供免費人工智能&#xff08…

Python與設計模式--適配器模式

7-Python與設計模式–適配器模式 一、外包人員系統兼容 假設某公司A與某公司B需要合作&#xff0c;公司A需要訪問公司B的人員信息&#xff0c;但公司A與公司B協議接口不同&#xff0c; 該如何處理&#xff1f;先將公司A和公司B針對各自的人員信息訪問系統封裝了對象接口。cla…

易點易動固定資產管理系統:全生命周期管理的理想選擇

在現代企業中&#xff0c;固定資產管理是一項至關重要的任務。為了確保企業的資產安全、提高資產利用率&#xff0c;全面管理固定資產的生命周期至關重要。易點易動固定資產管理系統為企業提供了一種全面的解決方案&#xff0c;實現了從固定資產申購、采購、入庫、領用、退庫、…

linux 內存回收mglru算法代碼注釋2

mglru與原lru算法的兼容 舊的lru算法有active與inactive兩代lru&#xff0c;可參考linux 內存回收代碼注釋&#xff08;未實現多代lru版本&#xff09;-CSDN博客 新的算法在引入4代lru的同時&#xff0c;還引入了tier的概念。 新舊算法的切換的實現在lru_gen_change_state&a…

ELK企業級日志分析平臺——elasticsearch

集群部署 文檔&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/7.6/index.html 下載&#xff1a;https://elasticsearch.cn/download/ 主機 ip 角色 k8s1 192.168.92.11 cerebro elk1 192.168.92.31 elasticsearch elk2 192.168.92.32 elasti…

數據庫實驗五 數據庫設計

數據庫實驗五 數據庫設計 一、實驗目的二、實驗內容三、實驗內容四、驗證性實驗五、設計性實驗 一、實驗目的 1.了解E-R圖構成要素以及各要素圖元。 2.掌握概念模型E-R圖的繪制方法。 3.掌握概念模型向邏輯模型的轉換原則和步驟。 4.運用sql編程實現 二、實驗內容 1.選取一個…