首页 > 代码库 > 15. 3Sum

15. 3Sum

https://leetcode.com/problems/3sum/#/description

 

Given an array S of n integers, are there elements abc in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note: The solution set must not contain duplicate triplets.

For example, given array S = [-1, 0, 1, 2, -1, -4],

A solution set is:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

 

 

 

Sol:

 

class Solution(object):
    def threeSum(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        # sort first and then use two pointers to push upon the mid point
        # skip repeated numbers
        # Space O(n^2), Time O(1)
        result = []
        if len(nums) < 3:
            return result
        
        sorted(nums)
        target = 0
        for i in range(len(nums) - 1):
            if i > 0 and nums[i] == nums[i-1]:
                continue
            j = i + 1
            k = len(nums) - 1
            while j < k:
                if nums[i] + nums[j] + nums[k] < target:
                    j += 1
                    while nums[j] == nums[j-1] and j < k:
                        j += 1
                elif nums[i] + nums[j] +nums[k] > target:
                    k -= 1
                    while nums[k] == nums[k+1] and j < k:
                        k -= 1
                else:
                    result.append([nums[i], nums[j], nums[k]])
                    j += 1
                    k -= 1
                    while nums[j] == nums[j-1] and j < k:
                        j += 1
                    while nums[k] == nums[k+1] and j < k:
                        k -= 1
                    
                    
                

 

15. 3Sum