167 兩數之和II (Two SumII)

2021-09-29 15:11:46 字數 2886 閱讀 4996

暴力法兩次雜湊表

一次雜湊表

和1.兩數之和 leetcode

1.兩數之和 csdn不同之處在於,本題附加了有序的特殊限定。同樣可以借助於暴力法在時間複雜度o(n

2)

o\left(n^\right)

o(n2

)和空間o(1

)o(1)

o(1)

解決。和雜湊表時間o(n

)o\left(n\right)

o(n)

和空間o(n

)o\left(n\right)

o(n)

完成。本題,我們利用排序陣列的性質,採用雙指標來在時間o(n

)o\left(n\right)

o(n)

和空間o(1

)o\left(1\right)

o(1)

解決。特判,若陣列為空,返回[]

定義左指標l=0

l=0l=

0指向最小元素,定義右指標r=n

−1

r=n-1

r=n−

1指向最大元素

迴圈條件l

l執行到這步,若不返回說明無解,返回[−1

,−1]

[-1,-1]

[−1,−1

]

class

solution

:def

twosum

(self, numbers: list[

int]

, target:

int)

-> list[

int]:if

(not numbers)

:return

res=

n=len(numbers)

l=0 r=n-

1while

(l(numbers[l]

+numbers[r]

==target)

:return

[l+1

,r+1

]elif

(numbers[l]

+numbers[r]

>target)

: r=r-

1else

: l=l+

1return[-

1,-1

]

兩次迴圈

第一次迴圈,對於陣列中每乙個數nums[i]進行遍歷

第二次迴圈,從當前數的下乙個數nums[j],其中j>i繼續遍歷,判斷nums[i]+num[j]是否等於target.

class

solution

:def

twosum

(self, nums: list[

int]

, target:

int)

-> list[

int]

: n=

len(nums)

for i in

range

(len

(nums)):

for j in

range

(i+1

,len

(nums)):

if(nums[i]

+nums[j]

==target)

:return

[i,j]

return

false

class

solution

:def

twosum

(self, nums: list[

int]

, target:

int)

-> list[

int]

:dict

=for i in

range

(len

(nums)):

dict

[nums[i]]=i

for j in

range

(len

(nums)):

tmp=target-nums[j]

if(tmp in

dict

anddict

[tmp]

!=j)

:return

[j,dict

[tmp]

]return

false

我們在遍歷時,將target-nums[i]存入詞典,值為索引i.這樣在遍歷時,只要判斷後續元素是否存在於詞典中,即可滿足條件.如:[2,7,11,15] target=9,將9-2=7 存入詞典,第二個元素7在詞典中存在,則返回.

class

solution

:def

twosum

(self, nums: list[

int]

, target:

int)

-> list[

int]

:dict

=for i in

range

(len

(nums)):

if(nums[i]

indict):

return

[i,dict

[nums[i]]]

else

:dict

[target-nums[i]]=i

return

false

LeetCode 167 兩數之和

給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。說明 返回的下標值 index1 和 index2 不是從零開始的。你可以假設每個輸入只對應唯一的答案,而且你不可以重複使...

LeetCode167 兩數之和II

1.題目描述 給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。說明 返回的下標值 index1 和 index2 不是從零開始的。你可以假設每個輸入只對應唯一的答案,而且...

LeetCode 167 兩數之和II

題目 給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。說明 返回的下標值 index1 和 index2 不是從零開始的。你可以假設每個輸入只對應唯一的答案,而且你不可以...