给定一个包含 n 个整数的数组
nums
,判断nums
中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]
首先将数组排序从小到大,其次 i 是最左端的 其次是 j k ,如果 i==i+1 那么 i+1就没有计算的必要了,以此为根据
j = i+1 k=length-1 如果 nums[i j k] 相加不为零就相应地进行移动,形成一个双指针
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums.sort()
length=len(nums)
lists=[]
for i in range(length-2):
# 如果i与前一个一样不用在找了
if i==0 or nums[i]>nums[i-1]:
j=i+1
k=length-1
# 不等于零就循环找一下有没有等于零的选项
while(j<k):
# 等于零记录 并且有额外情况的判断
if nums[i]+nums[j]+nums[k]==0:
lists.append([nums[i],nums[j],nums[k]])
k-=1
j+=1
while (j<k and nums[j]==nums[j-1]):
j+=1
while (j<k and nums[k]==nums[k+1]):
k-=1
# 大于零说明大了往前移动
elif nums[i]+nums[j]+nums[k]>0:
k-=1
# 小于零说明小了了往后移动
elif nums[i]+nums[j]+nums[k]<0:
j+=1
return lists