C++ map代碼練習 1、2、priority_queue基礎概念、對象創建、數據插入、獲取堆頂、出隊操作、大小操作,自定義結構、代碼練習 1 2

map代碼練習1,對應力扣 兩個數據的交集,代碼見下

class Solution {
public:vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {map<int, int> cnt;vector<int> ans;for(int i=0; i<nums1.size(); ++i){int x = nums1[i];cnt[x]++;}for(int i=0; i<nums2.size(); ++i){int x = nums2[i];if(cnt[x] > 0){cnt[x]--;ans.push_back(x);}}return ans;}
};

代碼2,對應力扣,合并相似的物品

class Solution {
public:vector<vector<int>> mergeSimilarItems(vector<vector<int>>& items1, vector<vector<int>>& items2) {map<int, int> mp;for(int i=0; i<items1.size(); ++i){int val = items1[i][0];int weh = items1[i][1];mp[val] += weh; }for(int i=0; i<items2.size(); ++i){int val = items2[i][0];int weh = items2[i][1];mp[val] += weh; }vector<vector<int>> ans;for(map<int, int>::iterator it = mp.begin(); it != mp.end(); it++){int val = it->first;int weh = it->second;ans.push_back({val, weh});}return ans;}
};

priority_queue 優先級隊列

parent(id) = (id - 1)/2

left(id) = id*2 + 1;

right(id) = id*2 + 2;

堆概念:滿足比他的所有子節點大或者小

大頂堆:滿足堆的概念(比所有子節點大),并且他的子節點也滿足堆的概念(比所有子節點大)

小頂堆:滿足堆的概念(比所有子節點小),并且他的子節點呀滿足堆的概念(比所有子節點小)

大頂堆的增刪查:

1,元素插入:往數組尾部插入一個元素、對插入的元素,比較他(在樹形結構中)和他父節點的大小關系,來決定是否和父節點進行交換。這個就是優先隊列的入隊操作。

2,獲取棧頂:獲取數組的第0個元素

3,元素刪除:把數組的第0個元素和最后有一個元素交換、然后對棧頂的元素不斷做“下沉”操作,選擇大的進行交換,直到“自己”成為最大的、刪除數組的最后一個元素。

容器特點:

線性容器:vector string list

樹形容器:set multiset map multimap

線性模擬樹:priority_queue

priority_queue對象創建,代碼見下

#include<iostream>
#include<queue>using namespace std;int main() {// 最大優先隊列priority_queue<int> q1;// 最小優先隊列priority_queue<int, vector<int>, greater<int>> q2;return 0;
}

priority_queue 數據插入

插入有一個特點,便是插入后的隊列的第零個元素都是當前元素中最大的那個元素(這個隊列是最大優先隊列)。最小優先隊列的話恰恰相反

代碼見下:

#include<iostream>
#include<queue>using namespace std;int main() {// 最大優先隊列priority_queue<int> q1;q1.push(6);q1.push(2);q1.push(1);q1.push(8); q1.push(16);q1.push(26);q1.push(9);// 最小優先隊列priority_queue<int, vector<int>, greater<int>> q2;q2.push(6);q2.push(2);q2.push(1);q2.push(8);q2.push(16);q2.push(26);q2.push(9);return 0;
}

具體調試過程可見下,用于幫助理解:

priority_queue獲取棧頂

#include<iostream>
#include<queue>using namespace std;int main() {// 最大優先隊列priority_queue<int> q1;q1.push(6); cout << q1.top() << endl;q1.push(2); cout << q1.top() << endl;q1.push(1); cout << q1.top() << endl;q1.push(8); cout << q1.top() << endl;q1.push(16); cout << q1.top() << endl;q1.push(26); cout << q1.top() << endl;q1.push(9); cout << q1.top() << endl;cout << "-----------------------------";// 最小優先隊列priority_queue<int, vector<int>, greater<int>> q2;q2.push(6); cout << q2.top() << endl;q2.push(2); cout << q2.top() << endl;q2.push(1); cout << q2.top() << endl;q2.push(8); cout << q2.top() << endl;q2.push(16); cout << q2.top() << endl;q2.push(26); cout << q2.top() << endl;q2.push(9); cout << q2.top() << endl;return 0;
}

這里的top其實便是front,見以下截圖

priority_queue 出隊操作,代碼見下

#include<iostream>
#include<queue>using namespace std;int main() {// 最大優先隊列priority_queue<int> q;q.push(6); q.push(2); q.push(1); q.push(8); q.push(16); q.push(26); q.push(9);for (int i = 0; i < 7; ++i) {cout << "top()" << q.top() << endl;q.pop();}return 0;
}

priority_queue 大小操作,代碼見下

#include<iostream>
#include<queue>using namespace std;int main() {// 最大優先隊列priority_queue<int> q;q.push(6); q.push(2); q.push(1); q.push(8); q.push(16); q.push(26); q.push(9);while (!q.empty()) {cout << "top()" << q.top() << "size()" << q.size() << endl;q.pop();}return 0;
}

priority_queue 自定義結構,代碼見下

#include<iostream>
#include<queue>using namespace std;struct type {int key;int value;type() { key = value = 0; };type(int k, int v) :key(k), value(v){};bool operator<(const type& t) const { // 這里的第二個const是確保成員函數不被修改return key < t.key;}
};
int main() {priority_queue<type> q;q.push(type(6, 1));q.push(type(5, 2));q.push(type(4, 2));q.push(type(8, 3));q.push(type(9, 2));while (!q.empty()) {cout << "top() = " << q.top().key << ", size()=" << q.size() << endl;q.pop();}return 0;
}

代碼練習一,對應力扣,丑數 || 代碼見下

class Solution {#define ll long long
public:int nthUglyNumber(int n) {priority_queue<ll, vector<ll>, greater<ll>> q;q.push(1);ll pre = -1;while(1){ll val = q.top();q.pop();while(val == pre){val = q.top();q.pop();}pre = val;--n;if(n==0){return val;}q.push(val * 2);q.push(val * 3);q.push(val * 5);}return -1;}
};

代碼練習 2 對應力扣 矩陣中的和,代碼見下

class Solution {
public:int matrixSum(vector<vector<int>>& nums) {int n = nums.size();int m = nums[0].size();priority_queue<int> q[300];for(int i=0; i<n; ++i){for(int j=0; j<m; ++j){q[i].push(nums[i][j]);}}int sum = 0;while(m--){int ret = 1;for(int i=0; i<n; ++i){ret = max(ret, q[i].top());q[i].pop();}sum += ret;}return sum;}
};

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

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

相關文章

三天沖刺《編譯原理》——筆記(一)

點關注不迷路喲。你的點贊、收藏&#xff0c;一鍵三連&#xff0c;是我持續更新的動力喲&#xff01;&#xff01;&#xff01; 持續關注我~~~主頁&#xff0c;查看更多內容喲&#xff08;希望你能在這里有所收獲&#x1f92d;&#xff09;。點關注&#xff0c;不迷路&#xf…

代理模式Proxy Pattern

模式定義 給某一個對象提供一個代理&#xff0c;并由代理對象控制對原對象的引用 對象結構型模式 模式結構 Subject&#xff1a;抽象主題角色Proxy&#xff1a;代理主題角色RealSubject&#xff1a;真實主題角色 代理類實現代碼 public class Proxy implements Subject {p…

基于YOLOv11與單目測距的實戰教程:從目標檢測到距離估算

引言 在計算機視覺領域&#xff0c;目標檢測與距離估算的結合是自動駕駛、機器人導航等場景的關鍵技術。本文將以YOLOv8模型為核心&#xff0c;結合單目相機的幾何模型&#xff0c;實現對視頻中目標的實時檢測與距離估算。代碼參考自單目測距原理博客&#xff0c;并通過實踐驗…

代碼生成器使用原理以及使用方法

代碼生成器使用原理以及使用方法 版本號&#xff1a;1.0 二Ο二五年二月 目錄 文檔介紹 1.1編寫目的 1.2文檔范圍 1.3讀者對象 系統設計 2.1設計目標 2.2設計思路 2.3代碼實現原理 使用方法 3.1如何使用 3.2如何修改&#xff1f; 對原程序的bug修改及簡…

STM32標準庫-I2C通信

文章目錄 一、I2C通信1.1 I2C1.2硬件電路1.3I2C時序基本單元1.4I2C時序 二、MPU60502.1簡介2.2MPU6050參數2.3硬件電路2.4MPU6050框圖 三、I2C外設(硬件)3.1簡介3.2I2C框圖3.3I2C基本結構3.4主機發送3.5主機接收3.6軟件/硬件波形對比1. 時序精度2. 信號穩定性3. 速率與效率4. 波…

使用 Azure LLM Functions 與 Elasticsearch 構建更智能的查詢體驗

作者&#xff1a;來自 Elastic Jonathan Simon 及 James Williams 試用這個示例房地產搜索應用&#xff0c;它結合了 Azure Gen AI LLM Functions 與 Elasticsearch&#xff0c;提供靈活的混合搜索結果。在 GitHub Codespaces 中查看逐步配置和運行該示例應用的方法。 更多閱讀…

模糊查詢 的深度技術解析

以下是 模糊查詢 的深度技術解析&#xff0c;涵蓋核心語法、通配符策略、性能優化及實戰陷阱&#xff1a; &#x1f50d; 一、核心運算符&#xff1a;LIKE SELECT * FROM 表名 WHERE 列名 LIKE 模式字符串;&#x1f3af; 二、通配符詳解 通配符作用示例匹配案例%任意長度字符…

[論文閱讀] (39)EuroSP25 CTINEXUS:基于大模型的威脅情報知識圖譜自動構建

《娜璋帶你讀論文》系列主要是督促自己閱讀優秀論文及聽取學術講座&#xff0c;并分享給大家&#xff0c;希望您喜歡。由于作者的英文水平和學術能力不高&#xff0c;需要不斷提升&#xff0c;所以還請大家批評指正&#xff0c;非常歡迎大家給我留言評論&#xff0c;學術路上期…

強化學習三大分類

核心目標&#xff1a; 教會一個智能體&#xff08;比如機器人、游戲AI、推薦系統&#xff09;通過試錯和獎勵&#xff0c;學會在某個環境中完成特定任務的最佳策略。 核心角色&#xff1a; 智能體 (Agent)&#xff1a; 學習者&#xff0c;比如玩游戲的小人、控制溫度的空調系…

城市排水生命線安全運行監測項目

近年來&#xff0c;城市內澇、污水溢流等問題頻發&#xff0c;讓排水管網這一"城市生命線"的安全運行備受關注。如何讓地下的"毛細血管"更智能、更可靠&#xff1f;本文將帶您深入解析城市排水生命線安全運行監測項目的建設邏輯與技術內核&#xff0c;看科…

LeetCode - 34. 在排序數組中查找元素的第一個和最后一個位置

題目 34. 在排序數組中查找元素的第一個和最后一個位置 - 力扣&#xff08;LeetCode&#xff09; 思路 查找左邊界 初始化 left 0, right nums.size() - 1 當 left < right 時循環&#xff1a; 計算中點 mid left (right - left) / 2 如果 nums[mid] < target…

Tesollo四指靈巧手DG-4F:18自由度與多種抓取模式結合實現高精度操作

Tesollo四指靈巧手 DG-4F 是一款具備 18 自由度的多模態末端執行器&#xff0c;采用模塊化結構設計&#xff0c;融合人手靈活性與夾爪高效性特點。該產品兼容 Universal Robots、Techman、Doosan Robotics、Rainbow Robotics 等主流機器人平臺&#xff0c;適用于工業自動化、科…

深入淺出JavaScript 原型鏈:對象繼承的“隱形鏈條”

深入淺出JavaScript 原型鏈&#xff1a;對象繼承的“隱形鏈條” 在 JavaScript 的世界里&#xff0c;原型鏈&#xff08;Prototype Chain&#xff09;是一個核心概念。它如同一條隱形的鏈條&#xff0c;連接著所有對象&#xff0c;使得代碼能夠高效地共享屬性和方法。理解原型…

LINUX中MYSQL的使用

LINUX中MYSQL的使用 MYSQL的數據類型 bool&#xff1a; 布爾類型 0 或者 1 CHAR&#xff1a; 單字符的字符 CHAR&#xff08;n&#xff09;:多字節字符 VARCHAR&#xff08;n&#xff09;&#xff1a;可變長度的字符型 TINYINT &#xff1a; 單字節整型 SMALLINT&#x…

打卡第48天:隨機函數與廣播機制

知識點回顧&#xff1a; 隨機張量的生成&#xff1a;torch.randn函數卷積和池化的計算公式&#xff08;可以不掌握&#xff0c;會自動計算的&#xff09;pytorch的廣播機制&#xff1a;加法和乘法的廣播機制 ps&#xff1a;numpy運算也有類似的廣播機制&#xff0c;基本一致 …

學習昇騰開發的第四天--基本指令

1、查看npu當前狀態信息 npu-smi info 2、查看NPU的ID npu-smi info -l3、調用python python3 4、修改用戶名 su - HwHiAiUser 5、查看cann版本 cat /usr/local/Ascend/ascend-toolkit/latest/compiler/version.info 6、刪除文件夾 sudo rm -rf HelloWorld7、在本地環…

vue3 - 自定義hook

自定義hook 簡單點來說就是將人物或者訂單的所有數據和方法放在一個ts文件里面 這樣便于維護 假如一個人只需要管 人物的模塊 那他只需要操作usePerson.ts文件就可以了 //useDog.ts import { ref,reactive} from vue; import axios from axios;export default function(){…

【python】bash: !‘: event not found

報錯 # 2. 測試smplx是否工作&#xff08;可能不需要chumpy&#xff09; python -c "import smplx; print(? smplx works!)"bash: !: event not found 分析 這是bash的歷史擴展問題&#xff0c;感嘆號被解釋為歷史命令。用這些方法解決&#xff1a; &#x1f680…

【Python打卡Day47】注意力熱力圖可視化@浙大疏錦行

可視化空間注意力熱力圖的意義&#xff1a; 提升模型可解釋性 熱力圖能直觀展示模型決策的依據區域&#xff0c;破除深度學習"黑箱"困境。例如在圖像識別中&#xff0c;可以看到模型識別"貓"是因為關注了貓耳和胡須區域&#xff0c;識別"禁止通行&qu…

樹狀數組 2

L - 樹狀數組 2 洛谷 - P3368 Description 如題&#xff0c;已知一個數列&#xff0c;你需要進行下面兩種操作&#xff1a; 將某區間每一個數加上 x&#xff1b; 求出某一個數的值。 Input 第一行包含兩個整數 N、M&#xff0c;分別表示該數列數字的個數和操作的總個數。…