LeetCode 刷題 [C++] 第347題.前 K 個高頻元素

題目描述

給你一個整數數組 nums 和一個整數 k ,請你返回其中出現頻率前 k 高的元素。你可以按 任意順序 返回答案。在這里插入圖片描述

題目分析

  1. 據題意可知,我們需要先遍歷整個數組,并統計每個數字出現的次數,保存在哈希表中;
  2. 對元素出現次數進行排序,由于題中要求時間復雜度必須優于O(NlogN),且數組中的元素可能都不相同的情況;
  3. 因此,我們需要利用堆排序的思想進行排序,并需要一些處理:

首先建立一個小頂堆,然后開始遍歷哈希表:
當堆中的元素個數小于K時,直接插入當前元素;
當堆中元素大于等于K時,比較堆頂和當前元素的大小,如果當前元素大,則彈出堆頂元素,并插入當前元素;反之,則舍棄當前元素;
遍歷完后,堆中元素就是前K個出現頻率最多的元素和出現的次數

  1. 遍歷堆,取出需要的元素,保存到容器中返回。

Code

class Solution {
public:vector<int> topKFrequent(vector<int>& nums, int k) {unordered_map<int,int> its_map;for (int num : nums) {its_map[num]++;}auto cmp = [](pair<int, int>& m, pair<int, int>& n) -> bool {return m.second > n.second;};priority_queue<pair<int,int>, vector<pair<int, int>>,decltype(cmp)> que(cmp);for (auto item : its_map) {if (k == que.size()) {if (que.top().second < item.second) {que.pop();que.emplace(item.first,item.second);}} else {que.emplace(item.first,item.second);}}vector<int> ans;ans.reserve(k);while (!que.empty()) {ans.emplace_back(que.top().first);que.pop();}return ans;}
};

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

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

相關文章

synchrosized 的可重入特性、死鎖、哲學家就餐問題以及解決死鎖的方法等干貨

文章目錄 &#x1f490;synchrosized的可重入特性關于死鎖&#xff1a;哲學家就餐問題&#x1f4a1;如何避免/解決死鎖 &#x1f490;synchrosized的可重入特性 可重入特性&#xff1a;當一個線程針對一個對象同時加鎖多次&#xff0c;不會構成死鎖&#xff0c;這樣的特性稱為…

前端學習第一天-html基礎

達標要求 網頁的形成過程 常用的瀏覽器及常見的瀏覽器內核 web 標準三層組成 什么是HTML 熟練掌握HTML文檔結構 熟練掌握HTML常用標簽 1. 初識web前端 Web前端是創建Web頁面或App等前端界面呈現給用戶的過程。 Web前端開發是從網頁制作演變而來&#xff0c;早期網站主…

sklearn.preprocessing.RobustScaler(解釋和原理,分位數,四分位差)

提示&#xff1a;sklearn.preprocessing.RobustScaler&#xff08;解釋和原理&#xff0c;分位數&#xff0c;四分位差&#xff09; 文章目錄 [TOC](文章目錄) 一、RobustScaler 是什么&#xff1f;二、代碼1.代碼2.輸出結果 總結 提示&#xff1a;以下是本篇文章正文內容&…

ELK學習

ELK 一、ELK介紹 &#x1f604; “ELK”是三個開源項目的首字母縮寫&#xff0c;這三個項目分別是&#xff1a;Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一個搜索和分析引擎。Logstash 是服務器端數據處理管道&#xff0c;能夠同時從多個來源采集數據&#xff0…

網絡編程(IP、端口、協議、UDP、TCP)【詳解】

目錄 1.什么是網絡編程&#xff1f; 2.基本的通信架構 3.網絡通信三要素 4.UDP通信-快速入門 5.UDP通信-多發多收 6.TCP通信-快速入門 7.TCP通信-多發多收 8.TCP通信-同時接收多個客戶端 9.TCP通信-綜合案例 1.什么是網絡編程&#xff1f; 網絡編程是可以讓設…

Redis的事務

在 Redis 中&#xff0c;事務&#xff08;Transaction&#xff09;是一組命令的集合&#xff0c;可以作為一個單獨的操作來執行&#xff0c;保證這組命令要么全部執行成功&#xff0c;要么全部執行失敗&#xff0c;具有原子性。在 Redis 中&#xff0c;事務是通過 MULTI、EXEC、…

repo介紹和安裝

介紹 https://blog.devwiki.net/2023/11/27/Windows-repo.html 安裝&#xff1a; https://blog.csdn.net/ysy950803/article/details/104188793

網絡安全-appcms-master

一、環境 gethub上面自己找appcms-master 二、開始闖關 原理&#xff1a;在評論的時候提交可以提交到管理員列表去&#xff0c;管理員一看cookie和地址就被盜走了 點進去軟件后會發現提交按鈕 隨便提交一下看看 放到div標簽里面是不是有可能可以做&#xff0c;看看后臺吧 那…

初學者如何學習python

Python 作為當今最受歡迎的編程語言之一&#xff0c;已經被包括谷歌、優步、Instagram 等知名公司廣泛采用于他們的應用程序開發。由于其易學易用的特性&#xff0c;Python 成為了編程初學者的首選語言。特別是在機器學習和數據科學領域&#xff0c;Python 的應用更是讓它成為了…

VUE CLI3項目搭建 ESLint配置

VUE項目框架配置 一、工具準備 Node.js安裝 安裝方法&#xff1a;點擊查看WebStorm安裝 下載地址&#xff1a;點擊查看 二、環境準備 鏡像準備 1.查看代理&#xff1a;npm get registry 2.設置淘寶鏡像 2.1臨時使用. npm --registry https://registry.npm.taobao.org ins…

【電機仿真】空間矢量脈寬調制(SVPWM)算法與實現

前言 文章【電機仿真】永磁同步電機模型中所提及了PMSM數學模型&#xff0c;模型算法是電機控制的理論基礎&#xff0c;但在實際控制中&#xff0c;需要將這兩部分具象化。實際電機所需要的總是三相電流或者電壓&#xff0c;控制對象為逆變器中的開關器件&#xff0c;我們需要將…

springboot基于web的音樂網站論文

音樂網站 摘要 隨著信息技術在管理上越來越深入而廣泛的應用&#xff0c;管理信息系統的實施在技術上已逐步成熟。本文介紹了音樂網站的開發全過程。通過分析音樂網站管理的不足&#xff0c;創建了一個計算機管理音樂網站的方案。文章介紹了音樂網站的系統分析部分&#xff0c…

114.龍芯2k1000-pmon(13)- 串口如何用

本文是講原理圖的部分&#xff0c;跟pmon的關系不大&#xff01;&#xff01; 參考手冊&#xff1a;《龍芯2K1000處理器用戶手冊.pdf》 剛剛看數據手冊&#xff0c;讓我是有點驚訝&#xff0c;但是也讓我迷惑。&#xff08;一個串口復用為4個是啥意思&#xff1f;&#xff09;…

Java項目:32 基于springboot的課程作業管理系統(含源碼數據庫+文檔免費送)

作者主頁&#xff1a;源碼空間codegym 簡介&#xff1a;Java領域優質創作者、Java項目、學習資料、技術互助 文中獲取源碼 項目介紹 管理員&#xff1a;首頁、個人中心、公告信息管理、班級管理、學生管理、教師管理、課程類型管理、課程信息管理、學生選課管理、作業布置管理…

CK98-數學家鍵盤配置

官方驅動和說明書下載地址 https://www.coolkiller.cn/download/lists_6.html 介紹&#xff1a;https://new.qq.com/rain/a/20221229A09B1M00 官方CK-98數學家驅動版本&#xff08;謹慎更新&#xff09; 如果升級驅動出現問題&#xff0c;重啟驅動軟件后會默認讓你恢復的。 …

[藍橋杯 2020 省 AB3] 日期識別

每日一道算法題之日期識別 一、題目描述二、思路三、C代碼 一、題目描述 題目來源&#xff1a;洛谷 【藍橋杯 2020 第三輪省賽 AB 組 F 題】小藍要處理非常多的數據, 其中有一些數據是日期。 在小藍處理的日期中有兩種常用的形式&#xff1a;英文形式和數字形式。英文形式采用…

利用小蜜蜂AI智能問答ChatGPT+AI高清繪圖生成圖文故事案例

利用小蜜蜂AI智能問答ChatGPTAI高清繪圖生成圖文故事案例 這段時間利用小蜜蜂AI網站做了一些編程、繪圖以及數據分析方面的案例。再過幾個月&#xff0c;我的大孫子就要出生了。我要用小蜜蜂AI智能問答和AI高清繪圖為大孫子生成一個1-9的數字圖文故事。 小蜜蜂AI網站可以掃如…

程序項目打包發布方法,采用InstallShield軟件

重點&#xff1a; 1.程序項目做出來了&#xff0c;需要打包發布給用戶。如何打包是關鍵。 2.采用InstallShield軟件進行發布。 步驟一&#xff1a;創建一個依賴三方庫配置環境的bat文件的項目。 &#xff08;主要測試三方庫打包 和如果有bat文件&#xff0c;需要先創建環境&…

讀書筆記-三國演義-曹操

魏武帝曹操&#xff08;155年&#xff0d;220年&#xff09;&#xff0c;是中國東漢末年至三國時期的重要政治家、軍事家和文學家&#xff0c;同時也是三國時期魏國的建立者。他以其雄才大略、果斷機敏的領導才能以及卓越的軍事才華而聞名于世。 生平 曹操出生于豫州譙縣&…

C++STL排序原理簡介

../chromedriver 一份簡化的代碼(可讀性較強)一份簡化的代碼(可讀性較強) 一份簡化的代碼(可讀性較強) c 的sort用了很多年&#xff0c;一直不知道具體是怎么寫的 決定看看代碼&#xff0c;以下文章結構可能有點混亂&#xff0c;建議讀者同時打開vs同步跳轉 https://www.geeksf…