leetocode 15 三數之和

2021-10-02 07:57:39 字數 1408 閱讀 5327

難度就是結果進行去重。

之前做過一道兩數之和的題,本題也採用雙指標解法。

特判:當陣列長度小於3時,返回空列表

對陣列進行排序,方便之後的去重

對陣列進行遍歷,當元素,與前邊的相同時,跳過本次迴圈,當陣列的元素大於0時,之後的元素肯定沒有可以相加為0的三個數了。因此返回結果

假設l = i - 1 , r = len(nums) -1,如果nums[i]+nums[l]+nums[r]>0,就調整r,反之調整l,在調整l和r的過程中也要多l,和r對應的值,進行去重。

class

solution

:def

threesum

(self, nums: list[

int])-

> list[list[

int]]:

iflen

(nums)

<3:

return

n =len(nums)

nums.sort(

)print

(nums)

res =

for i in

range

(n):

if nums[i]

>0:

return res

if(i >

0and nums[i]

== nums[i -1]

):continue

l = i +

1 r = n -

1while l < r:

if nums[i]

+ nums[l]

+ nums[r]==0

:print

(l,r)

[nums[i]

, nums[l]

, nums[r]])

while

(l < r and nums[l]

== nums[l +1]

):l = l +

1while

(l < r and nums[r]

== nums[r -1]

):r = r -

1 l = l+

1 r = r-

1elif nums[i]

+ nums[l]

+ nums[r]

<0:

l = l +

1elif nums[i]

+ nums[l]

+ nums[r]

>0:

r = r -

1return res

15 三數之和

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

15 三數之和

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。有兩種寫法 第一種耗時久,但容易解讀 class solution if nums.length 3 else if ...

15 三數之和

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