Python 兩數之和(多種方法)

2021-10-24 02:24:36 字數 2257 閱讀 1160

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。

你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。

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

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

所以返回 [0, 1]

前兩種方法時間均為 6000ms+

解題**:

class

solution

:def

twosum

(self, nums: list[

int]

, target:

int)

-> list[

int]

:for i in

range(0

,len

(nums)-1

):for j in

range

(i+1

,len

(nums)):

a=nums[i]

+nums[j]

if a==target:

return ls

之後發現返回列表形式可以直接指定,不需要定義列表。

class

solution

:def

twosum

(self, nums: list[

int]

, target:

int)

-> list[

int]

:for i in

range(0

,len

(nums)):

for j in

range

(i+1

,len

(nums)):

if nums[i]

+nums[j]

==target:

return

[i,j]

不過這個方法時間成本較大,還需要優化

以下兩個方法是別的大神的題解方法

lens =

len(nums)

for i in

range

(lens)

:if target - nums[i]

in nums:

if(nums.count(target - nums[i])==

1)&(nums.index(target - nums[i]

)==i)

:continue

else

: j=nums.index(target-nums[i]

,i+1

)#從nums的i+1位置開始查詢

break

return

[i,j]

解題思路:

1、遍歷陣列,求target-nums[i]的差,判斷結果是否在nums列表中(因為不是每乙個元素的差都在列表中,不判斷的話會報錯)。

2、如果運算結果在列表中,則需要判斷結果是否是nums[i](例如,nums=[3.3],如果不判斷的話,結果就會輸出[0,0])。也就是說如果nums中等於差的元素只有乙個,並且這個值在陣列中的位置等於i,那就說明這個值是nums[i]本身,那需要繼續判斷下乙個nums[i]。

3、如果運算結果不是nums[i],那可以獲取target-nums[i]對應的位置。這裡需要注意:j=nums.index(target-nums[i],i+1),其中的引數(i+1)是代表j是從nums的i+1位置開始查詢,又排除了j=i的可能。

lens =

len(nums)

j=-1

for i in

range

(lens)

: nums1=nums[

:i]if target-nums[i]

in nums1:

j=nums1.index(target-nums[i]

)break

else

:continue

if j<0:

return

else

:return

[j,i]

解題思路:

在i位置之前的元素中查詢target-nums[i]對應的值,然後直接返回值在nums列表中的位置,**的可讀性和執行速度都有了很大的提公升。

python 兩數之和

給定乙個整數陣列 nums和乙個整數目標值 target,請你在該陣列中找出和為目標值的那兩個整數,並返回它們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。def twosum nums,tatget hashmap for ind,num in enumera...

計算fibonacci數(多種方法)

include using namespace std 計算fibonacci數 方法一 二分遞迴法,時間複雜度為o 2 n 額外空間複雜度為常數 int recursivefibonacci int n 方法二 線性遞迴,時間複雜度為o n 空間複雜度為o n int linearrecursio...

leecode 兩數之和的四種方法

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。class solution def twosum sself,nums,target type ...