leetcode之兩數之和

2021-10-03 07:04:31 字數 1772 閱讀 1184

廢棄很久的部落格,終於從灰塵中撿起來了。摸魚近一年,最終研果真沒希望考上了。還是老老實實挨社會的毒打吧。leetcode刷題好平台,先用它來熟悉很久未上手的演算法吧!

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。

你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。

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

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

所以返回 [0, 1]

題解

求和是二元的,兩個迴圈剛好對應二元未知。直接暴力?

當然不可能,只用乙個迴圈找數num,另乙個數用target - num表示。

每遍歷乙個數,就把數num和數num的索引號ind放入乙個字典dic中。

每次遍歷時,都看看字典dic中是否有target-num這個數,如果有,那麼就找到了x + y = target這個公式了。

class

solution

:def

twosum

(self, nums: list[

int]

, target:

int)

-> list[

int]

: dic =

for ind, num in

enumerate

(nums)

: tmp = target-num

if tmp in dic:

return

(dic[tmp]

, ind)

dic[num]

= ind

以上是大佬的思路,簡單明瞭44ms/14.6mb

下面是懵逼的我寫的另一種思路,沒用到字典,思路也就差不多,太過複雜:976ms/14mb

class

solution

:def

twosum

(self, nums: list[

int]

, target:

int)

-> list[

int]

: ln =

len(nums)

for i in

range

(ln)

: tmp = target - nums[i]

cnt = nums.count(tmp)

if(tmp == nums[i]

and cnt>=2)

or(tmp!=nums[i]

and cnt>0)

: a = i

b = nums[i+1:

].index(tmp)

+i+1

return

(a, b)

翻譯成c++如下16ms/13mb

class

solution;}

dict[nums[i]

]= i+1;

}return;}

};

資料感人,還待優化。。。

LeetCode之兩數之和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...

LeetCode之兩數之和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...

Leetcode之兩數之和

題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1...