LC 0015 [M] 3Sum - ALawliet/algorithms GitHub Wiki
prereq: 2sum sorted
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
n = len(nums)
def search_pairs(i):
l = i + 1
r = n - 1
while l < r: # 2Sum
s = nums[i] + nums[l] + nums[r]
diff = target - s
if diff == 0: # s == 0
threes.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
elif diff > 0: # too small/go bigger right, s < target
l += 1
elif diff < 0: # too big/go smaller left, s > target
r -= 1
threes = []
nums.sort()
target = 0
for i in range(n - (3-1)): # 3 for 3Sum
if i > 0 and nums[i] == nums[i-1]: continue
search_pairs(i)
return threes
T: O(n^2)