给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]

示例 2:

输入:nums = []
输出:[]

示例 3:

输入:nums = [0]
输出:[]

提示:

  • 0 <= nums.length <= 3000
  • -10^5 <= nums[i] <= 10^5

Python 解答:
1.暴力

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        res = []
        aset = set()
        for i in range(len(nums)):
            if nums[i] > 0:
                break
            else:
                j = i+1
                total = -nums[i]
                while j < len(nums):
                    if nums[j] not in aset:
                        temp = total - nums[j]
                        aset.add(temp)
                    else:
                        if [nums[i], nums[j], total-nums[j]] not in res:
                            res.append([nums[i], nums[j], total-nums[j]])
                    j += 1
                aset.clear()
        return res

2.双指针

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        res = []
        for i in range(len(nums)):
            if nums[i] > 0:
                break
            else:
                j, k = i+1, len(nums)-1
                total = -nums[i]
                while j < k:
                    if nums[j]+nums[k] == total:
                        if [nums[i], nums[j], nums[k]] not in res:
                            res.append([nums[i], nums[j], nums[k]])
                        j += 1
                        k -= 1
                    elif nums[j]+nums[k] < total:
                        j += 1
                    else:
                        k -= 1
        return res
最后修改日期: 2021年6月23日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。