問題描述:
給定乙個整數陣列 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 無解...