給定乙個整數陣列 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 ...