方法一,暴力:
from typing import list
class
solution
:def
twosum
(self, nums: list[
int]
, target:
int)
-> list[
int]
:for i in
range
(len
(nums)):
for j in
range
(i+1
,len
(nums)):
if nums[i]
+nums[j]
==target:
return
[i,j]
return
方法二:
def
twosum
(nums, target)
: lens =
len(nums)
j=-1
for i in
range
(lens):if
(target - nums[i]
)in nums:
if(nums.count(target - nums[i])==
1)&(target - nums[i]
== nums[i]):
#如果num2=num1,且nums中只出現了一次,說明找到是num1本身。
continue
else
: j = nums.index(target - nums[i]
,i+1
)#index(x,i+1)是從num1後的序列後找num2
break
if j>0:
return
[i,j]
else
:return
方法二,改進:
class
solution
:def
twosum
(self, nums: list[
int]
, target:
int)
-> list[
int]
:for i in
range
(len
(nums)):
temp = nums[
:i] num1 = target - nums[i]
if num1 in temp:
j = temp.index(num1)
return
[i,j]
方法三,使用雜湊表(耗時最短):
class
solution
:def
twosum
(self, nums: list[
int]
, target:
int)
-> list[
int]
:"""
:type nums: list[int]
:type target: int
:rtype: list[int]
"""map_a =
dict()
k =len(nums)
for i in
range(0
, k)
:#一邊將列表中的數新增到字典中,一邊判斷兩數之差是否存在於字典中
temp = target - nums[i]
if temp in map_a :
# 判斷步驟
return
[map_a[temp]
, i]
map_a[nums[i]
]= i # 新增步驟(切記先判斷再新增,以免key衝突)
參考
python之雜湊表
菜鳥-python字典
Leecode 1 兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素 示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...
Leecode 1 兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9...
Leecode 1 兩數之和
leetcode 每日一題彙總 給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 num...