给你一个包含 n 个整数的数组 nums
,判断 nums
中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]
**难度**: Medium
**标签**: 数组、 双指针、
# -*- coding: utf-8 -*-
# @Author : LG
"""
执行用时:972 ms, 在所有 Python3 提交中击败了61.82% 的用户
内存消耗:16 MB, 在所有 Python3 提交中击败了96.71% 的用户
解题思路:
双指针法,固定一个值,然后双指针遍历其余值
先对列表进行排序
i 循环遍历列表,作为固定值
l, r 作为左右指针,分别去遍历剩余值
具体实现见代码注释
"""
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums.sort()
n = len(nums)
now = None # 用于记录固定值,判断是否重复
result = []
for i in range(n):
if nums[i] == now: # 遇到重复的值,跳过
continue
now = nums[i]
if nums[i] > 0: # 如果当前值大于0,则之后的和绝对大于0,跳出(因为已排序)
break
l, r = i+1, n-1 # 左右指针
while l0, 右指针左移
r -= 1
return result