廢棄很久的部落格,終於從灰塵中撿起來了。摸魚近一年,最終研果真沒希望考上了。還是老老實實挨社會的毒打吧。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...