暴力法兩次雜湊表
一次雜湊表
和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 不是從零開始的。你可以假設每個輸入只對應唯一的答案,而且你不可以...