日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

(哈希)两数之和(leetcode 1)

發(fā)布時(shí)間:2025/3/12 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (哈希)两数之和(leetcode 1) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.題目

給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù)目標(biāo)值 target,請(qǐng)你在該數(shù)組中找出 和為目標(biāo)值 target 的那 兩個(gè) 整數(shù),并返回它們的數(shù)組下標(biāo)。

你可以假設(shè)每種輸入只會(huì)對(duì)應(yīng)一個(gè)答案。但是,數(shù)組中同一個(gè)元素在答案里不能重復(fù)出現(xiàn)。

你可以按任意順序返回答案。

示例 1:

輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
解釋:因?yàn)?nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:

輸入:nums = [3,2,4], target = 6
輸出:[1,2]
示例 3:

輸入:nums = [3,3], target = 6
輸出:[0,1]

提示:

2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只會(huì)存在一個(gè)有效答案
進(jìn)階:你可以想出一個(gè)時(shí)間復(fù)雜度小于 O(n2) 的算法嗎?

2.分析與解答

2.1基礎(chǔ)知識(shí)

map是STL的一個(gè)關(guān)聯(lián)容器。

map<string,int> cnt;//前鍵后值,鍵就可以理解為索引,每個(gè)索引只能在map中出現(xiàn)一次

map中修改數(shù)據(jù):
int i = my_Map[“a”];
my_Map[“a”] = i;//索引a對(duì)應(yīng)的值是i

map中的count()函數(shù): 返回索引出現(xiàn)的次數(shù),由于map中索引只出現(xiàn)一次,所以返回只會(huì)是0或1.

a[i],其實(shí)提供了一個(gè)i到a[i]的映射

map中的count()函數(shù),能夠判斷鍵是否出現(xiàn)過(guò),同時(shí)map中的鍵和值也能夠擁有其原本的意義。

但是用數(shù)組就有了局限性,因?yàn)槿绻補(bǔ)[i]當(dāng)成一個(gè)i到a[i]的映射,那么無(wú)法判斷a[i]是否出現(xiàn)過(guò)。所以說(shuō)一個(gè)數(shù)組作為映射的話(huà)比map作為映射表示的內(nèi)涵要少。

2.2思路

給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù)目標(biāo)值 target,請(qǐng)你在該數(shù)組中找出 和為目標(biāo)值 target 的那 兩個(gè) 整數(shù)。

也就是說(shuō),在數(shù)組里有兩個(gè)數(shù)a和target-a,需要輸出他們的下標(biāo)。

解決的思路:

  • 通過(guò)map建立一個(gè)數(shù)和下標(biāo)的映射。
  • 然后掃描數(shù)組,判斷數(shù)nums[i]所對(duì)應(yīng)的target-nums[i]是否在map中。
  • 如果找到,那么讀出鍵對(duì)應(yīng)的值也就是數(shù)的下標(biāo)。
  • 如果沒(méi)找到,把這個(gè)數(shù)和它的下標(biāo)存在map里。
  • 2.3代碼(c++)

    class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {map<int,int> a;//提供一對(duì)一的hashvector<int> b(2,-1);//用來(lái)承載結(jié)果,初始化一個(gè)大小為2,值為-1的容器bfor(int i=0;i<nums.size();i++){if(a.count(target-nums[i])>0)//如果找到一個(gè)數(shù)是target-nums[i]{b[1]=i;b[0]=a[target-nums[i]];//讀出它對(duì)應(yīng)的下標(biāo)break;}a[nums[i]]=i;//把這個(gè)數(shù)和它的下標(biāo)存在map里}return b;}; };

    總結(jié)

    以上是生活随笔為你收集整理的(哈希)两数之和(leetcode 1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。