大神解法---用字典模擬雜湊求解
筆記
種一棵樹最好的時間是十年前,其次是現在。廢柴的成長之路要開始了(暴風式哭泣
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
(注意考慮到陣列中兩個重複的數字求和為target的情況)
class
solution
: def twosum
(self, nums: list[int]
, target: int)
-> list[int]
:for ind, num in
enumerate
(nums):if
(target-num)
in nums and target!=
2*num:
return ind,nums.
index
(target-num)
;elif
(target/
2== num)
and(nums.
count
(num)!=1
):return ind,nums.
index
(target-num,ind+
1)
執**況為:
(並不需要每次從nums查詢一遍,只需從從num1位置之前或者之後查詢即可。為了方便index,這裡選擇從num1位置之前查詢)
class
solution
: def twosum
(self, nums: list[int]
, target: int)
-> list[int]
:for ind, num in
enumerate
(nums)
: temp = nums[
:ind]
if(target-num)
in temp and target!=
2*num:
return temp.
index
(target-num)
,ind;
elif
(target/
2== num)
and(nums.
count
(num)!=1
):return ind,nums.
index
(target-num,ind+1)
;
執**況為:
相較於前面的方法就是字典記錄了num1和num2的值和位置,而省了在查詢num2索引的步驟
def twosum
(nums, target)
: hashmap=
for ind,num in
enumerate
(nums)
: hashmap[num]
= ind
for i,num in
enumerate
(nums)
: j = hashmap.
get(target - num)
if j is not none and i!=j:
return
[i,j]
通過字典的方法,查詢效率快很多,執行速度大幅縮減,共88ms。
類似於廢柴方法二,不需要num2在整個dict中去查詢。可以在num1之前的dict中查詢,因此就只需要一次迴圈就可解決。
def twosum
(nums, target)
: hashmap=
for i,num in
enumerate
(nums)
:if hashmap.
get(target - num) is not none:
return
[i,hashmap.
get(target - num)
] hashmap[num]
= i #這句不能放在if語句之前,解決list中有重複值或target-num=num的情況
不過該方法相較於前乙個方法的執行速度沒有像方法二相較於方法一的速度提公升。執行速度在 70ms 多。
返回true/false 返回true說明陣列nums中有值為num2的數字
查詢num2的索引
是從num1後的序列中找num2(num1的index為i)
Leetcode題解之其他(1)位1的個數
題目 題目描述 編寫乙個函式,輸入是乙個無符號整數,返回其二進位制表示式中數字位數為 1 的個數 也被稱為漢明重量 示例 輸入 11輸出 3解釋 整數 11 的二進位制表示為00000000000000000000000000001011示例 2 輸入 128 輸出 1 解釋 整數 128 的二進位...
LeetCode之(1)兩數之和(Two Sum
給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回...
LeetCode1之兩數之和 Two Sum
一 題目 二 兩種解題思路 方法一 1 介紹 map輔助法 方法解析 map輔助法,從x 陣列的第乙個數開始,進行y target x的計算,並且檢視y是否在map中存在,若存在,則返回x的下標和y的下標,若不存在,則將數儲存到map中,繼續迴圈以上操作,若到最後還沒有符合條件的,則丟擲異常。時間複...