給你乙個包含 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 分析排序 雙指標避免...