【算法 - 哈希表】兩數之和

這里寫自定義目錄標題

  • 兩數之和
  • 題目解析
  • 思路
    • 解法一 :暴力枚舉 依次遍歷
    • 解法二 :使用哈希表來做優化
  • 核心邏輯
    • 為什么之前的暴力枚舉策略不太好用了?
    • 所以,這就是 這道題選擇 ==固定一個數,再與其前面的數逐一對比完后,再將其自身放入hash表中,參與匹配== 的原因
  • 代碼實現



兩數之和

題目解析

在這里插入圖片描述



思路

解法一 :暴力枚舉 依次遍歷

  • 時間復雜度 O(n^2)
    暴力枚舉兩層for()循環遍歷O(n^2)
  • 空間復雜度 無
  1. 先固定其中一個數
  2. 依次與該數之前的數相加

而 解法二 則是,遍歷完這個數以后,將其丟入hash表中。枚舉下一個數時,很自然的枚舉hash表中前面遍歷過的數

解法二 :使用哈希表來做優化

  • 時間復雜度:O(n)
    由原來的 暴力枚舉兩層for()循環遍歷O(n^2) 到 ,只需遍歷一遍 固定一個數O(n)哈希表查找匹配的另一個數O(1)

  • 空間復雜度:O(n)
    對比 暴力枚舉 即可看出,哈希表是用 空間換時間



核心邏輯

為什么之前的暴力枚舉策略不太好用了?

我們也能把所有的數都放入hash表中,再由前往后遍歷一遍數組,再直接在hash中找匹配的數就好了,為什么還要 逐一遍歷,再將遍歷到的節點逐一放入hash表中

這是因為會出現 恰好 遍歷到的數本身,也能滿足匹配的要求 的情況,這違反了題目所說的需求 數組中同一個元素在答案里不能重復出現
在這里插入圖片描述
blog.csdnimg.cn/direct/4e384c8f2ebd454f910606e12c610d2c.jpeg)

因此,這種做法需要加入特判


所以,這就是 這道題選擇 固定一個數,再與其前面的數逐一對比完后,再將其自身放入hash表中,參與匹配 的原因

因此,循環遍歷固定一個節點遍歷完后將該節點放入hash表中,后繼續向后遍歷,僅需查找前面放入hash表中的值即可(就不會出現查找hash表中選中自身的情況,這樣的順序避免了 出現了重復出現同一個數字 的情況 。不需要再處理什么邊界情況 了。



代碼實現

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {                                   //  數  ,下標unordered_map<int,int> hash;    // <nums[i],i>   // 遍歷數組for(int i=0;i<nums.size();i++){int x=target-nums[i];if(hash.count(x)) return {hash[x],i};  // hash[x]中 存放的就是 x的下標hash[nums[i]]=i;     // 遍歷完后,將該節點放入到hash表中}// 照顧編譯器return {1,-1};}
};

在這里插入圖片描述

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

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

相關文章

Linux系統(CentOS)安裝iptables防火墻

1&#xff0c;先檢查是否安裝了iptables 檢查安裝文件-執行命令&#xff1a;rpm -qa|grep iptables 檢查安裝文件-執行命令&#xff1a;service iptables status 2&#xff0c;如果安裝了就卸裝(iptables-1.4.21-35.el7.x86_64 是上面命令查出來的版本) 執行命令&#xff1a…

藍牙信標和藍牙標簽我們如何區分,區分方法有哪些?

藍牙信標和藍牙標簽其實是兩種不同的技術&#xff0c;很多人可能會把藍牙信標和藍牙標簽搞混&#xff0c;因為區分不開來&#xff0c;但實際上&#xff0c;區分這兩種技術也很簡單&#xff0c;因為它們各自都有不一樣的特性&#xff0c;通過這些特性&#xff0c;我們也能正常區…

相機光學(二十四)——CRA角度

CRA角度 0.參考資料1.什么是CRA角度2.為什么 CRA 會導致luma shading3.為什么 CRA 會導致color shading4.CRA相差過大的具體表現5.CRA Matching6.怎樣選擇sensor的CRA 0.參考資料 1.芯片CRA角度與鏡頭的匹配關系&#xff08;一&#xff09; ??2.芯片CRA角度與鏡頭選型的匹配關…

爬蟲進階:Selenium與Ajax的無縫集成

爬蟲與Ajax的挑戰 Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;允許網頁在不重新加載整個頁面的情況下與服務器交換數據并更新部分內容。這為用戶帶來了更好的體驗&#xff0c;但同時也使得爬蟲在抓取數據時面臨以下挑戰&#xff1a; 動態內容加載&#xff…

go語言 函數和包

go語言 函數和包 一、函數 在Go語言中&#xff0c;函數是執行特定任務的自包含代碼塊。 1.函數的定義 函數通過func關鍵字定義&#xff0c;格式如下&#xff1a; func 函數名(形參 形參類型, 形參 形參類型) 返回值類型 {函數體return 返回值 }2.基礎函數類型 無參數無返回…

vue中數組出現__ob__: Observer屬性,導致不能正確使用問題解決

直接上圖&#xff0c;如下圖&#xff0c;數組中出現__ob__: Observer屬性&#xff0c;導致無法取值。 解決方案為&#xff1a;JSON.parse(JSON.stringify(數組變量名))深拷貝數組&#xff0c;重新生成一個可枚舉數組。 // 處理代碼如let tempIds JSON.parse(JSON.stringify(i…

一文帶你初探FreeRTOS信號量

本文記錄我初步學習FreeRTOS的信號量的知識&#xff0c;在此記錄分享&#xff0c;希望我的分享對你有所幫助&#xff01; 什么是信號量 在FreeRTOS中&#xff0c;信號量&#xff08;Semaphore&#xff09;是一種用于任務間同步和資源共享的機制。信號量主要用于管理對共享資源的…

Cgi上傳文件 注意事項

//核心代碼 ofstream outfile("/opt/software/" file.getFilename(), ios::out | ios::binary); outfile << file.getData(); //錯誤方式&#xff1a;outfile << file.getData() <<endl; outfile.close(); 參考博客&#xff1a; https://blog.cs…

GNU/Linux - 各種包管理器介紹

Linux 包管理器根據不同的發行版和包管理系統有所不同。以下是一些常見的 Linux 包管理器&#xff1a; 1. RPM (Red Hat Package Manager) * 用于&#xff1a; Red Hat Enterprise Linux (RHEL), Fedora, CentOS, openSUSE * 包管理器&#xff1a; rpm, yum, dnf 2. DEB (Deb…

HTML如何在圖片上添加文字

HTML如何在圖片上添加文字 當我們開發一個頁面&#xff0c;插入圖片時&#xff0c;需要有一組文字對圖片進行描述。那么HTML中如何在圖片上添加文字呢&#xff1f;這篇文章告訴你。 先讓我們來看下效果圖&#xff1a; 句子“這是一張夜空圖片”被放置在了圖片的左下角。 那么…

Leetcode.342 4的冪

給定一個整數&#xff0c;寫一個函數來判斷它是否是 4 的冪次方。如果是&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 整數 n 是 4 的冪次方需滿足&#xff1a;存在整數 x 使得 n 4x 示例 1&#xff1a; 輸入&#xff1a;n 16 輸出&#xff1a;true示…

微信小程序的智慧物流平臺-計算機畢業設計源碼49796

目 錄 摘要 1 緒論 1.1 研究背景 1.2 研究意義 1.3研究方法 1.4開發技術 1.4.1 微信開發者工具 1.4.2 Node.JS框架 1.4.3 MySQL數據庫 1.5論文結構與章節安排 2系統分析 2.1 可行性分析 2.2 系統流程分析 2.2.1 用戶登錄流程 2.2.2 數據刪除流程 2.3 系統功能分…

C#面:ASP.NET Core Filter如何?持依賴注??

ASP.NET Core Filter可以通過依賴注入來支持。在ASP.NET Core中&#xff0c;依賴注入是一種將依賴對象提供給類的機制&#xff0c;它可以幫助我們解耦和測試代碼。 要在ASP.NET Core Filter中使用依賴注入&#xff0c;可以按照以下步驟進行操作&#xff1a; 首先&#xff0c;…

ESP32CAM物聯網教學09

ESP32CAM物聯網教學09 攝像頭配上顯示屏 小智給攝像頭配上了一塊液晶顯示屏,ESP32Cam變得更加酷炫了,應用也更加廣泛了。 TFT彩色顯示屏從第一課的CameraWebServer開始,我們一直都是利用瀏覽器來查看顯示攝像頭的視頻流,都需要借助這個網頁提供的服務。 可以讓ESP32Cam開…

【案例干貨】智能導覽智慧景區系統小程序開發主要功能

智能景區/園區導覽系統是一種利用云計算、物聯網等新技術&#xff0c;通過互聯網或移動互聯網&#xff0c;借助便攜的終端上網設備&#xff0c;為游客提供全方位、便捷化街區導航與信息服務的系統。 其主要功能可以歸納為以下幾個方面&#xff1a; 1. 街區資訊展示 信息介紹&…

纏中說禪李彪08年“假死”具體原因探討

在纏中說禪的信徒圈內&#xff0c;流傳著創始人李彪于2008年逝世的說法&#xff0c;這一事件常被描繪成一種悲壯的犧牲&#xff0c;仿佛是為了其理念與信徒們的福祉鞠躬盡瘁。然而&#xff0c;這一“逝世”既未經公開證實&#xff0c;也與李彪生前構建的高大名聲形成了某種諷刺…

短鏈接學習day2

用戶敏感信息脫敏展示&#xff1a; RequestParam 和 PathVariable的區別 注解是用于從request中接收請求的&#xff0c;兩個都可以接收參數&#xff0c;關鍵點不同的是RequestParam 是從request里面拿取值&#xff0c;而 PathVariable 是從一個URI模板里面來填充。 PathVari…

異步加載與動態加載

異步加載和動態加載在概念上有相似之處&#xff0c;但并不完全等同。 異步加載&#xff08;Asynchronous Loading&#xff09;通常指的是不阻塞后續代碼執行或頁面渲染的數據或資源加載方式。在Web開發中&#xff0c;異步加載常用于從服務器獲取數據&#xff0c;而不需要用戶等…

昇思25天學習打卡營第12天|ResNet50遷移學習

昇思25天學習打卡營第12天|ResNet50遷移學習 前言ResNet50遷移學習數據準備下載數據集 加載數據集數據集可視化 訓練模型構建Resnet50網絡固定特征進行訓練訓練和評估可視化模型預測 個人任務打卡&#xff08;讀者請忽略&#xff09;個人理解與總結 前言 非常感謝華為昇思大模型…

vite簡介

vite是新一代前端構建工具&#xff0c;vite具有優勢如下&#xff1a; 輕量快速的熱重載&#xff08;HMR&#xff09;&#xff0c;能實現快速的服務啟動。對TypeScript、JSX、CSS等支持開箱即用。真正的按需編譯&#xff0c;不再等待整個應用編譯完成。webpack構建與vite構建對…