题目描述
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
链接:https://leetcode-cn.com/problems/3sum
双指针
有个测试样例在[0,0,0]卡了很久 发现首元素的判断 k>0
第一重循环遍历所有不重复的数
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums.sort()
res =[]
k=0
for k in range(len(nums)-2):
if nums[k] > 0: break
if k>0 and nums[k]== nums[k-1]: continue
i = k+1
j = len(nums)-1
while i < j:
s = nums[k]+nums[i]+nums[j]
if s < 0:
i=i+1
while i<j and nums[i]==nums[i-1]: i+=1
elif s > 0:
j=j-1
while i<j and nums[j] == nums[j+1]: j-=1
else:
res.append([nums[i],nums[j],nums[k]])
i=i+1
j=j-1
while i<j and nums[i]==nums[i-1]: i+=1
while i<j and nums[j+1] == nums[j]: j-=1
return res