兩數之和(LeetCode題)

2021-10-06 01:53:39 字數 2092 閱讀 7507

問題描述:

給定乙個整數陣列 nums 和乙個目標值 target,

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

你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。

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

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

所以返回 [0, 1]

python**

nums =[2

,7,11

,15]target =

9"""

第一種思路(最耗時間):

拿陣列裡的第乙個數字和後面的數字分別相加,

看是否等於target;如果不等於target,那麼就繼續拿陣列裡的第二個數字和後面的數字相加;

不停的去乙個個試...直到等於target,返回這2個數字所在的下標

"""class

solution1

:def

twosum

(self, nums, target)

: n =

len(nums)

# 獲取nums的長度,從此題中是4

for x in

range

(n):

# 外層迴圈取出下標0,對應著陣列裡的第乙個數字

for y in

range

(x +

1, n)

:# 內層迴圈取出下標0,對應著陣列裡的第二個數字

if nums[x]

+ nums[y]

== target:

# 如果第乙個數字+第二個數字==target

return x, y # 上面的判斷是對的話,那麼就返回下標

break

# 並停止迴圈

else

:# 如果上面的條件不滿足的話,內層for迴圈就會繼續取出下標進行判斷

continue

"""第二種思路(用乙個for迴圈):

直接用target減去取出的數字,看結果有沒有在陣列裡

"""class

solution2

:def

twosum

(self, nums, target)

: n =

len(nums)

for x in

range

(n):

a = target - nums[x]

if a in nums:

# 判斷a有沒有在nums陣列裡

y = nums.index(a)

# 有的話,就用index獲取該數字的下標(索引)

if x == y:

continue

# 同樣的數字不能重複用,所以這裡如果是一樣的數字,那麼就不滿足條件,跳過

else

:# 否則返回結果

return x, y

break

else

:continue

# 上面的條件都不滿足就跳過,進行下乙個迴圈

"""第三種思路,用字典提高速度

把原先的陣列轉化成字典,通過字典去查詢速度就會快很多。

"""class

solution3

:def

twosum

(self, nums, target)

: d =

n =len(nums)

for x in

range

(n):

if target - nums[x]

in d:

# 看另外乙個數字有沒有在字典裡

return d[target - nums[x]

], x

else

: d[nums[x]

]= x # 把陣列裡的數字作為key,下標作為value存到d字典中

a = solution1(

)# 例項化類

print

(a.twosum(nums, target)

)

leetCode刷題 兩數之和

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

LeetCode題1 兩數之和

題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。原始 class solution def twosum self,nums,target ...

LeetCode演算法題 兩數之和

記錄在leetcode上的做題記錄。給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。class solution throw newexception 無解...