LeetCode15. 三数之和(python)

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

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

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

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

解题思路:

双指针

跟两数之和思路很像,先排序,再遍历小于0的数,再从该数左侧找到两个数之和为该数的相反数,再去重即可。

代码:

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        n = len(nums)
        res = []
        
        for i in range(n):
            if i > 0 and nums[i] == nums[i-1]:
                continue
            else:
                left, right = i+1, n-1
                while left < right:
                    num_sum = nums[i] + nums[left] + nums[right] 
                    if num_sum == 0:
                        s = [nums[i], nums[left], nums[right]]
                        res.append(s)
                        while left < right and nums[left] == nums[left+1]:
                            left += 1
                        while left < right and nums[right] == nums[right-1]:
                            right -= 1
                        left += 1
                        right -= 1
                    elif num_sum < 0:
                        left += 1
                    elif num_sum >0:
                        right -=1
        return res 
         

猜你喜欢

转载自blog.csdn.net/qq_43235359/article/details/89740386