题目

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

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

示例:

给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

解法

吴彦祖的解法非常清晰明了

Y76kWt.jpg

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        if len(nums) < 3:
            return []
        nums.sort()     # 排序
        ans = []

        for i in range(len(nums) - 2):
            low, high = i + 1, len(nums) - 1
         
            if nums[i] > 0:
                return ans
            # 相同的元素
            if i > 0 and nums[i] == nums[i - 1]:
                continue
            
            while low < high:
                complement = nums[low] + nums[high]
                if complement == -nums[i]:
                    ans.append([nums[i], nums[low], nums[high]])
                    # 跳过重复的元素
                    while low < high and nums[low] == nums[low + 1]:
                        low += 1
                    # 跳过重复的元素
                    while low < high and nums[high] == nums[high - 1]:
                        high -= 1
                    low += 1
                    high -= 1
                elif complement > -nums[i]:
                    high -= 1
                else:
                    low += 1
        return ans
Last modification:May 20th, 2020 at 09:21 pm
如果觉得我的文章对你有用,请尽情赞赏 🐶