15. 3Sum

Medium

Given an array nums of n integers, are there elements a, b, c in nums 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.

😇 Solution

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        
        res = []
        nums.sort() #O(nlogn)
        length = len(nums)
        for i in range(length-2): #O(n)
            
            if nums[i]>0:
                break
                
            if i>0 and nums[i]==nums[i-1]:
                continue 

            l, r = i+1, length-1
            
            while l<r: #O(n)
                total = nums[i]+nums[l]+nums[r]

                if total<0:
                    l+=1
                    
                elif total>0:
                    r-=1
                    
                else:
                    res.append([nums[i], nums[l], nums[r]])
                    while l<r and nums[l]==nums[l+1]:
                        l+=1
                    while l<r and nums[r]==nums[r-1]:
                        r-=1
                    l+=1
                    r-=1
        return res

Last updated

Was this helpful?