哈希表-算法小結

哈希表

map set 數組

在C++中,set 和 map 分別提供以下三種數據結構,其底層實現以及優劣如下表所示:

集合底層實現是否有序數值是否可以重復能否更改數值查詢效率增刪效率
std::set紅黑樹有序O(log n)O(log n)
std::multiset紅黑樹有序O(logn)O(logn)
std::unordered_set哈希表無序O(1)O(1)

std::unordered_set底層實現為哈希表,std::set 和std::multiset 的底層實現是紅黑樹

紅黑樹是一種平衡二叉搜索樹,所以key值是有序的,但key不可以修改,改動key值會導致整棵樹的錯亂,所以只能刪除和增加。

映射底層實現是否有序數值是否可以重復能否更改數值查詢效率增刪效率
std::map紅黑樹key有序key不可重復key不可修改O(logn)O(logn)
std::multimap紅黑樹key有序key可重復key不可修改O(log n)O(log n)
std::unordered_map哈希表key無序key不可重復key不可修改O(1)O(1)

std::unordered_map 底層實現為哈希表,std::map 和std::multimap 的底層實現是紅黑樹

同理,std::map 和std::multimap 的key也是有序的

Set與Multiset-筆記-CSDN博客

有效的字母異位詞

思路
在這里插入圖片描述

定義一個數組叫做record用來上記錄字符串s里字符出現的次數

242. 有效的字母異位詞 - 力扣(LeetCode)

兩個數組的交集

在這里插入圖片描述

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int>result_set;unordered_set<int>nums_set(nums1.begin(),nums1.end());for(auto n2:nums2){if(nums_set.find(n2)!=nums_set.end()){result_set.insert(n2);}}return vector<int>(result_set.begin(),result_set.end());}
};

兩數之和

在遍歷數組的時候,只需要向map去查詢是否有和目前遍歷元素匹配的數值,如果有,就找到的匹配對,如果沒有,就把目前遍歷的元素放進map中,因為map存放的就是我們訪問過的元素

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {std::unordered_map <int,int> map;for(int i = 0; i < nums.size(); i++) {// 遍歷當前元素,并在map中尋找是否有匹配的keyauto iter = map.find(target - nums[i]); if(iter != map.end()) {return {iter->second, i};}// 如果沒找到匹配對,就把訪問過的元素和下標加入到map中map.insert(pair<int, int>(nums[i], i)); }return {};}
};

1. 兩數之和 - 力扣(LeetCode)

四數之和

  1. 遍歷大A和大B數組,統計兩個數組元素之和,和出現的次數,放到map中。
    1. 再遍歷大C和大D數組,找到如果 0-(c+d) 在map中出現過的話,就用count把map中key對應的value也就是出現次數統計出來。

三數之和

雙指針
依然還是在數組中找到 abc 使得a + b +c =0,我們這里相當于 a = nums[i],b = nums[left],c = nums[right]。

如果nums[i] + nums[left] + nums[right] > 0
說明 此時三數之和大了,因為數組是排序后了,所以right下標就應該向左移動,這樣才能讓三數之和小一些。

如果 nums[i] + nums[left] + nums[right] < 0
說明 此時 三數之和小了,left 就向右移動,才能讓三數之和大一些,直到left與right相遇為止

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

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

相關文章

OpenCompass模型評估

OpenCompass面向大模型的開源方和使用者&#xff0c; 提供開源、高效、全面的大模型評測開放平臺。 一、OpenCompass文檔 1.基礎安裝 使用Conda準備 OpenCompass 運行環境&#xff1a; conda create --name opencompass python3.10 -y conda activate opencompass2. 安裝 Op…

博途 TIA Portal之1200做主站與有意思的板子做MODBUS_RTU通訊

做為博途的硬件,1200和1500本體都不具有串口通訊功能,只能使用擴展板或是通訊模塊完成。 其中1200使用CB1241或CM1241進行串口通訊,本文將使用CM1241進行演示。 1、硬件介紹 1200的PLC一臺,有意思的板子(以下簡單4D板)一臺。 其中1200帶擴展模塊CM1241 RS232;4D板使…

【深度學習與實戰】3.1 邏輯回歸模型

?1. 定義與核心思想? 邏輯回歸&#xff08;Logistic Regression&#xff09;是一種用于?二分類問題?的統計學習方法&#xff0c;通過?sigmoid函數?將線性回歸的輸出映射到[0,1]區間&#xff0c;表示樣本屬于某一類別的概率?。 ?本質?&#xff1a;廣義線性模型&#x…

AI三萬字論文生成效果——隨機森林在信用卡欺詐分析

以下內容全文由AI制作&#xff0c;有gemini和gpt模型配合一次性生成&#xff08;即未來我們會發布的功能&#xff09;&#xff0c;一次性生成的三萬多字論文效果。 標題&#xff1a;隨機森林在信用卡欺詐分析中的應用研究 摘要 信用卡欺詐已成為全球金融領域面臨的嚴峻挑戰…

質檢LIMS系統在半導體制造行業的應用 半導體質量革命的現狀

在半導體這個“工業皇冠上的明珠”領域&#xff0c;納米級的精度要求與質量管控如同硬幣的兩面。隨著芯片制程向3nm、2nm演進&#xff0c;傳統質檢模式已難以滿足海量數據、復雜工藝的質量追溯需求。質檢LIMS實驗室系統作為質量管理的中樞神經&#xff0c;正在重構半導體制造的…

idea手動創建resources文件夾

有時maven沒有構建成功可能造成&#xff0c;resources文件夾不創建的現象 此時我們可以手動創建 手動創建

利用Ruby的Typhoeus編寫爬蟲程序

Typhoeus是一個基于libcurl的HTTP客戶端&#xff0c;支持并行請求&#xff0c;適合高效爬取數據。用戶可能想要一個簡單的例子&#xff0c;或者需要處理更復雜的情況&#xff0c;比如分頁、并發請求或者數據解析。 首先&#xff0c;我應該檢查用戶是否已經安裝了Typhoeus。通常…

【mllm】——x64模擬htp的后端無法編譯debug

mllm, qnn, x64 code:https://github.com/UbiquitousLearning/mllm 1. 問題 通過自定義qualcomm graph使用高通的htp后端進行llm推理&#xff0c;網絡暫時只有mllm&#xff0c;和https://github.com/chraac/llama.cpp。qualcomm是支持x64模擬htp推理的&#xff0c;這樣比較好d…

JDK(Java Development Kit)從發布至今所有主要版本 的詳細差異、新增特性及關鍵更新的總結,按時間順序排列

以下是 JDK&#xff08;Java Development Kit&#xff09;從發布至今所有主要版本 的詳細差異、新增特性及關鍵更新的總結&#xff0c;按時間順序排列&#xff1a; 1. JDK 1.0 (1996) 發布年份&#xff1a;1996年1月23日關鍵特性&#xff1a; Java首次正式發布。核心語言特性…

撰寫學位論文Word圖表目錄的自動生成

第一步&#xff1a;為圖片和表格添加題注 選中圖片或表格 右鍵點擊需要編號的圖片或表格&#xff0c;選擇 【插入題注】&#xff08;或通過菜單欄 引用 → 插入題注&#xff09;。 設置題注標簽 在彈窗中選擇 標簽&#xff08;如默認有“圖”“表”&#xff0c;若無需自定義標…

Xcode為不同環境配置不同的環境變量

一般有三種方式&#xff1a; 一、通過多Target 二、通過scheme,也就是多configurations 三、通過.xcconfig文件 先來看第二種方式&#xff1a;通過scheme,也就是多configurations,包括自定義User-settings 第一步&#xff1a;增加configurations,Xcode默認為我們生成了…

《車輛人機工程-汽車駕駛操縱實驗》

汽車操縱裝置有哪幾種&#xff0c;各有什么特點 汽車操縱裝置是駕駛員直接控制車輛行駛狀態的關鍵部件&#xff0c;主要包括以下幾種&#xff0c;其特點如下&#xff1a; 一、方向盤&#xff08;轉向操縱裝置&#xff09; 作用&#xff1a;控制車輛行駛方向&#xff0c;通過轉…

Python(10.2)Python可變與不可變類型內存機制解密:從底層原理到工程實踐

目錄 一、類型特性引發的內存現象1.1 電商促銷活動事故分析1.2 內存機制核心差異 二、內存地址追蹤實驗2.1 基礎類型驗證2.2 復合對象實驗 三、深度拷貝內存分析3.1 淺拷貝陷阱3.2 深拷貝實現 四、函數參數傳遞機制4.1 默認參數陷阱4.2 安全參數模式 五、內存優化最佳實踐5.1 字…

高并發秒殺系統如何鎖住庫存

博主介紹&#xff1a;?全網粉絲5W&#xff0c;全棧開發工程師&#xff0c;從事多年軟件開發&#xff0c;在大廠呆過。持有軟件中級、六級等證書。可提供微服務項目搭建與畢業項目實戰&#xff0c;博主也曾寫過優秀論文&#xff0c;查重率極低&#xff0c;在這方面有豐富的經驗…

【Docker】Dockerfile 編寫實踐

&#x1f47b;創作者&#xff1a;丶重明 &#x1f47b;創作時間&#xff1a;2025年4月8日 &#x1f47b;擅長領域&#xff1a;運維 目錄 1. Dockerfile編寫原則1.1.選擇合適的基礎鏡像1.2.鏡像層優化1.3.多階段構建1.4.安全增強 2. 關鍵指令與技巧2.1.COPY vs ADD2.2.ENTRYPOIN…

【數學建模】(智能優化算法)螢火蟲算法(Firefly Algorithm)詳解與實現

螢火蟲算法(Firefly Algorithm)詳解與實現 文章目錄 螢火蟲算法(Firefly Algorithm)詳解與實現前言1. 算法原理2. 算法流程3. Python實現4. 算法特點4.1 優點4.2 缺點 5. 應用領域6. 算法變種7. 總結與展望參考文獻 前言 大家好&#xff0c;今天給大家介紹一種有趣且高效的群體…

VSCode會擊敗Cursor和Windsurf嗎?

VSCode 會擊敗 Cursor 和 Windsurf 嗎&#xff1f;微軟能不能靠自己的地盤優勢和規則限制打壓對手&#xff1f;答案是"能"&#xff0c;但他們真的會這么干嗎&#xff1f; Cursor & Windsurf vs VSCode Copilot 大PKAI編程工具大戰越來越激烈現在最火最賺錢的AI…

2025-4-11 情緒周期視角復盤(mini)

簡單說兩句好了&#xff0c;做一個階段記錄&#xff0c;目前階段就是上一輪 中毅達 第二輪補漲的退潮結束&#xff0c;回盛生物 金河生物 它們的題材導致 農業和醫藥這2個題材退潮&#xff0c;注意的是不靠譜導致的反制題材是在這個二輪補漲周期里一起走的&#xff0c;所以 海…

【SLAM】將realsense-viewer錄制的rosbag視頻導出成圖片序列(RealSense D435)

本文介紹了如何將realsense-viewer錄制的rosbag格式的視頻導出成圖片序列&#xff0c;方便合并成mp4視頻或插入到論文中。 本文首發于?慕雪的寒舍 說明 Intel提供的realsense-viewer軟件錄制的視頻都是rosbag格式的&#xff0c;為了編寫論文&#xff0c;需要從錄制的視頻中截…

Ubuntu ROS 對應版本

Ubuntu 18.04 (Bionic Beaver) - 2018年4月發布 對應的ROS版本&#xff1a;ROS Melodic (2018年5月發布) Ubuntu 20.04 (Focal Fossa) - 2020年4月發布 對應的ROS版本&#xff1a;ROS Noetic (2020年5月發布) Ubuntu 22.04 (Jammy Jellyfish) - 預計2022年4月發布 對應的ROS版…