Leetcode刷題01 求兩數之和

2021-10-24 20:40:32 字數 2210 閱讀 5888

**題目:**給定乙個整數陣列 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.遍歷兩次列表,然後判斷遍歷得到的數...