15 三數之和(python)

2021-10-06 19:05:12 字數 1522 閱讀 8447

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

注意:答案中不可以包含重複的三元組。

給定陣列 nums =[-

1,0,

1,2,

-1,-

4],滿足要求的三元組集合為:[[

-1,0

,1],

[-1,

-1,2

]]

class

solution

:def

threesum

(self, nums):if

len(nums)

<3:

# 若陣列長度 < 3,直接返回空

return

nums =

sorted

(nums)

# 排序

re =

# 結果變數

for i in

range

(len

(nums)):

# 遍歷

if nums[i]

>0:

# 若 nums[i] > 0,則沒有數字之和為0,直接返回re

return re

if i >

0and nums[i]

== nums[i-1]

:# 排除重複陣列

continue

l = i +

1# 左指標

r =len(nums)-1

# 右指標

while l < r:

# 遍歷

temp = nums[i]

+ nums[l]

+ nums[r]

# 三數之和

if temp ==0:

# 若temp = 0

[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 -

1# 右指標左移,遍歷

elif temp >0:

# 若temp > 0

r = r -

1# 則應該讓三數之和小一些,故右指標左移

else

:

l = l +

1# 反之,應該讓三數之和大一些,故左指標右移

return re

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 分析排序 雙指標避免...