給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組
注意:答案中不可以包含重複的三元組
例如, 給定陣列 nums = [-1, 0, 1, 2, -1, -4],滿足要求的三元組集合為:
[[-1, 0, 1],
[-1, -1, 2]
]
先排序,然後從兩端開始向中間搜尋,i為遍歷後的數字,r表示最右端數字,l表示nums[i + 1],每次遍歷後如果三個數字的和為0,就r和l都同時移到下乙個索引(r–,l++),這是因為要求去重,如果只改變乙個還符合條件的話一定是重複的。因為列表是按順序排的,所以和》0, 則說明當前的r偏大,因此r-=1; 反之, 說明當前的l偏小,則把l+=1
class
solution
:def
threesum
(self, nums)
: nums.sort(
) res_list =
for i in
range
(len
(nums)):
if i ==
0or nums[i]
> nums[i-1]
: l = i +
1 r =
len(nums)-1
while l < r:
s = nums[i]
+ nums[r]
+ nums[l]
if s ==0:
[nums[i]
, nums[r]
, nums[l]])
l +=
1 r -=
1while l < r and nums[l]
== nums[l-1]
: l +=
1while r > l and nums[r]
== nums[r+1]
: r -=
1elif s >0:
r -=
1else
: l +=
1return res_list
leetcode 三數之和
給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 因為這次是要求輸出對應的三...
LeetCode 三數之和
題目描述 給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 題目分析 有序陣...
Leetcode 三數之和
解決方案一 class solution else if nums j nums k target else while i 1 1 i return lllist 解決方案2 class solution 如果有3個0,就直接作為乙個解 if zerosize 3 res.add arrays.a...