**題目:**給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
1.暴力解法直接遍歷陣列進行查詢
class
solution
(object):
deftwosum
(self, nums, target)
:"""
:type nums: list[int]
:type target: int
:rtype: list[int]
"""for i in
range(0
,len
(nums)-1
):for j in
range
(i+1
,len
(nums)):
if nums[i]
+ nums[j]
== target:
return
[i,j]
測試結果:
2.雜湊表解法
以空間換取速度的方式,將查詢時間從 o(n)降低到 o(1)
class
solution
(object):
deftwosum
(self, nums, target)
:"""
:type nums: list[int]
:type target: int
:rtype: list[int]
"""#新建立乙個空字典用來儲存數值及其在列表中對應的索引
dict1 =
#遍歷一遍列表對應的時間複雜度為o(n)
for i in
range(0
,len
(nums)):
#相減得到另乙個數值
num = target - nums[i]
#如果另乙個數值不在字典中,則將第乙個數值及其的索引報錯在字典中
#因為在字典中查詢的時間複雜度為o(1),因此總時間複雜度為o(n)
if num not
in dict1:
dict1[nums[i]
]= i
#如果在字典中則返回
3.排序解法可以先對nums陣列進行排序,然後首尾相加
class
solution
(object):
deftwosum
(self, nums, target)
:"""
:type nums: list[int]
:type target: int
:rtype: list[int]
"""temp=nums
temp=temp.sort(
) i=
0 j=
len(nums)-1
-i for i in
range(0
,len
(nums)):
if nums[i]
+nums[j]
>target:
j=j-
1if nums[i]
+nums[j]
i=i+
1else
:break
return
[i,j-
1]
第一次在上面刷題,有些是參考的其他人的答案,請各位大佬多多指 LeetCode刷題 01 兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9...
LeetCode刷題 01 兩數之和
給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所...
LeetCode刷題之求兩數之和
題目 給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 解決思路 1.遍歷兩次列表,然後判斷遍歷得到的數...