給定乙個包含 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
(object):
defthreesum
(self, nums)
:"""
:type nums: list[int]
:rtype: list[list[int]]
"""nums.sort(
) res =
# 返回值
iflen
(nums)
<3:
# 異常判斷
return
for k in
range
(len
(nums)-2
):if nums[k]
>0:
# 因為 nums[j] > nums[i] > nums[k]
break
if k >
0and nums[k]
== nums[k-1]
:continue
# 跳過相同的元素
i,j = k +1,
len(nums)-1
# 雙指標 前後夾擊
while i < j :
s = nums[k]
+ nums[j]
+ nums[i]
# 三數之和
if s <0:
# 三數之和小於0,左邊的指標i向右移動增大,並且要跳過所有的相同的元素
i +=
1jwhile i < j and nums[i]
== nums[i -1]
: i += 1i
elif s >0:
# 三數之和大於0,右邊的指標j向左移動減小,並且要跳過所有的相同的元素
j -=
1while i < j and nums[j]
== nums[j +1]
: j -=
1else
:# 三數之和等於0,將組合新增到res,並且要跳過所有的相同的元素
[nums[k]
,nums[i]
,nums[j]])
i +=
1 j -=
1while i < j and nums[i]
== nums[i -1]
: i +=
1while i < j and nums[j]
== nums[j +1]
: j -=
1return res
空間複雜度o(1
)o(1)
o(1):
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...