leetcode 15 三數之和

2021-09-13 16:41:26 字數 2719 閱讀 4734

1.題目:

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得a + b + c = 0?找出所有滿足條件且不重複的三元組。

例如, 給定陣列 nums = [-1, 0, 1, 2, -1, -4],

滿足要求的三元組集合為:

[ [-1, 0, 1],

[-1, -1, 2]

]

2.**:

/*

對於演算法跳過i,m,n重複部分:

0 1 2 3 4 5 6 7 8 9

-2, -2, -2, 0, 0, 0, 1, 1, 3, 4

1.對於i跳過相同元素:

必須的,不然會出現重複序列

2.對於m,n跳過相同元素:

若要重複部分最後乙個:

0 1 2 3 4 5 6 7 8 9

-2, -2, -2, 0, 0, 0, 1, 1, 3, 4

i,m,n:沒有0,6,7和3,4,5,只有0,1,9

所以m,n選擇各自方向上第乙個,即

m==m-1=>m++

n==n+1=>n--

*/

遍歷+兩數之和:

class

solution

:def

threesum

(self, nums: list[

int])-

> list[list[

int]]:

r =nums.sort(

) lens =

len(nums)

for i in

range

(lens)

:if i>

0and nums[i]

==nums[i-1]

:continue

if nums[i]

>0:

return r

m = i+

1 n = lens-

1while mif nums[m]

+nums[n]

>

-nums[i]

: n = n-

1elif nums[m]

+nums[n]

<

-nums[i]

: m = m+

1else

:# print(i,m,n)

t =[nums[i]

,nums[m]

,nums[n]

] m = m+

1 n = n-

1while m== nums[m-1]

: m = m+

1while n>i and nums[n]

== nums[n+1]

: n = n-

1return r

對情況進行分類⇒ (3,0),(2,1),(1,1,1),(1,2),其中數字是相同的個數:

class

solution

:def

threesum

(self, nums: list[

int])-

> list[list[

int]]:

r =counts =

for i in nums:

counts[i]

= counts.get(i,0)

+1nums =

sorted

(counts)

lens =

len(nums)

for i,num in

enumerate

(nums)

:if counts[num]

>1:

#3,0

if num ==

0and counts[num]

>2:

[0,0

,0])

#2,1

elif-2

*num in nums and num!=0:

# if num>0:

# else:

[num,num,-2

*num]

)#1,1,1

#1,2

if num<0:

m,n = i+1,

len(nums)-1

while mif nums[m]

+nums[n]

>

-nums[i]

: n = n-

1elif nums[m]

+nums[n]

<

-nums[i]

: m = m+

1else

:[num,nums[m]

,nums[n]])

n = n-

1 m = m+

1return r

LeetCode 15 三數之和

15.給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組 方法一,個人解法正確,但是效率太低,時間複雜度o n 3 時間超時,無法提交至leetcode public s...

leetcode 15 三數之和

給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 class solutio...

leetcode15 三數之和

給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 先找兩數之和,然後再用un...