Leetcode 兩數之和

2021-10-03 09:13:47 字數 1318 閱讀 1591

題目鏈結 兩數之和

給定乙個陣列和乙個target,在這個陣列中找到兩個數的和等於這個target,並返回他們在陣列中的下標。

示例
給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

解法一

暴力解法,時間複雜度o(n*n),空間複雜度o(n)。對於所給的陣列進行兩邊for迴圈,為的就是把所有不重複的兩個數的組合找出來,看其之和是否與target相等,相等就返回各自的下標。

程式**

class

solution

;return;}

};

解法二

時間複雜度o(nlogn)空間複雜度o(n)

利用c++中的map函式,我們可以先將nums陣列的值和下標存入map中,然後我們可以利用target-nums[i]是否在存在map中進行查詢,就可以得到答案。

class

solution

;

m[nums[i]

]=i;

}return;}

};

其實我覺得解法三跟解法二一樣,只是剛開始的先進行了賦值操作m[nums[i]]=i;把上面的程式中注釋掉的那一行加進去,把程式中的 m[nums[i]]=i; 刪掉。

解法四跟解法二差不多,只是這裡沒有用到map,直接是用陣列的有序性來進行hash的,適用於nums中的數值不是很大的情況,如果數值很大,空間就會炸掉。

這道題最容易想到的就是解法一,但是一旦對時間要求更加嚴格,就不能夠a掉。而時間複雜度主要就是耗費在查詢第二個數上,這個時候就應該得想想,有沒有什麼時間複雜度更低的查詢方法。而知道的一些查詢方法裡面有二分查詢、map的是用、平衡樹等等,利用樹結構查詢時間基本都在log n,而這裡為了方便操作,我們就採用map。

在leetcode提交**和洛谷、hdu、pku、bzoj等不太一樣,洛谷、hdu、pku、bzoj這一類的**是需要提交乙個完整的程式,但是leetcode只需要提交乙個函式。

以上面的例題來講,leetcode上面會幫你把class、public、vector類似這樣的**寫好,也就是給你先寫乙個模板。資料啥的會自動儲存在nums、target裡面,相當於現在我們只需要寫乙個函式,把最後需要輸出的值像在函式中那樣返回到主程式當中。(也可以理解為在leetcode上面他已經幫你把資料輸入好了,現在我們只需要用輸入好的資料以及定義好的變數繼續往下寫**就好了,跟在函式中寫程式一樣。)

leetcode 兩數之和與兩數之和

題目描述 給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。說明 返回的下標值 index1 和 index2 不是從零開始的。你可以假設每個輸入只對應唯一的答案,而且你不...

LeetCode 兩數之和

基礎不好,筆試 題沒做好,校招沒offer,趕緊來刷題 這裡採用兩種方法來做,比較效能。nums i for i in range 1,100000000 target 3 class solution object deftwosum self,nums,target if len nums 1 ...

兩數之和(LEETCODE)

給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 下面是 include stdafx.h includ...