難度就是結果進行去重。
之前做過一道兩數之和的題,本題也採用雙指標解法。
特判:當陣列長度小於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 分析排序 雙指標避免...