1 兩數之和 Python LeetCode

2021-08-17 23:33:02 字數 2471 閱讀 8243

剛開始接觸演算法方面,好多都不懂,打算每刷一題就整理一下

給定乙個整數數列,找出其中和為特定值的那兩個數。

你可以假設每個輸入都只會有一種答案,同樣的元素不能被重用。

示例:

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

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

所以返回 [0, 1]

解法一:.剛開始看到的的時候,第乙個想到的就是用乙個巢狀迴圈把nums列表遍歷兩次,雖然測試通過了但是耗時實在太長了,然後就考慮了其他時間複雜度低的方法

**如下:

class solution:

def twosum(self,nums, target):

""":type nums: list[int]

:type target: int

:rtype: list[int]

"""#用len()方法取得nums列表的長度

n = len(nums)

#x取值從0一直到n(不包括n)

for x in range(n):

#y取值從x+1一直到n(不包括n)

#用x+1是減少不必要的迴圈,y的取值肯定是比x大

for y in range(x+1,n):

#假如 target-nums[x]的某個值存在於nums中

if nums[y] == target - nums[x]:

#返回x和y

解法二:用乙個for迴圈,直接在裡面查詢target-nums[x]是否存在於nums列表中,速度比解法一快了許多,但還是不夠

**如下:

class solution:

def twosum(self,nums, target):

""":type nums: list[int]

:type target: int

:rtype: list[int]

"""#用len()方法取得nums列表長度

n = len(nums)

#x從0到n取值(不包括n)

for x in range(n):

a = target - nums[x]

#用in關鍵字查詢nums列表中是否有a

if a in nums:

#用index函式取得a的值在nums列表中的索引

y = nums.index(a)

#假如x=y,那麼就跳過,否則返回x,y

解法三:這個解法是我看了排名前幾個的答案後才知道的, 先建立乙個空字典,然後依次把target-nums[x]的值存入字典,存入乙個就跟nums[x+1]去比較, 字典中的key為target-nums[x],value為x,也就是nums[x]在nums列表中的索引位置。當字典d中有nums[x+1]時,也就是target - nums[y] = nums[x+1] , y肯定是小於x+1的(因為y是x+1之前迴圈過的數字)

所以是 return y,x+1

class solution:

def twosum(self,nums, target):

""":type nums: list[int]

:type target: int

:rtype: list[int]

"""#用len()方法取得nums列表長度

n = len(nums)

#建立乙個空字典

d = {}

for x in range(n):

a = target - nums[x]

#字典d中存在nums[x]時

if nums[x] in d:

return d[nums[x]],x

#否則往字典增加鍵/值對

else:

d[a] = x

#邊往字典增加鍵/值對,邊與nums[x]進行對比

1 兩數之和

給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 解class solution hash nums i...

1 兩數之和

給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 由於元素不能重複利用,所以使用j i 1,通過雙迴圈,...

1 兩數之和

你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。public int twosum int nums,int target throw new illegalargumentexception no two sum solution 這樣的時間複雜度為0 nlogn 但是通過檢視官方的...