philosyang.com

15. 3Sum

i initially used two pointers + lookup table, it’s also O(N**2) but it TLEs on an example that has [0, 0, 0, 0, ..., 0].

 1class Solution:
 2    def threeSum(self, nums: List[int]) -> List[List[int]]:
 3        nums.sort()
 4        n = len(nums)
 5        result = []
 6
 7        for i in range(n):
 8            # skip duplicates
 9            if i > 0 and nums[i] == nums[i - 1]:
10                continue
11
12            target = -nums[i]
13            l, r = i + 1, n - 1
14            while l < r:
15                if nums[l] + nums[r] == target:
16                    result.append([nums[i], nums[l], nums[r]])
17                    l += 1
18                    r -= 1
19                    while l < r and nums[l] == nums[l - 1]:
20                        l += 1
21                    while l < r and nums[r] == nums[r + 1]:
22                        r -= 1
23                elif nums[l] + nums[r] < target:
24                    l += 1
25                else:
26                    r -= 1
27
28        return result

#Neetcode150 #Array #Two-Pointers #Sorting #Python