class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
[Link]()
n = len(nums)
res = []
index_map = {}
# Build value-to-indices map
for i, num in enumerate(nums):
index_map.setdefault(num, []).append(i)
# Edge case: [0, 0, 0]
if index_map.get(0, []) and len(index_map[0]) >= 3:
[Link]([0, 0, 0])
def twoSum(start_idx, target):
seen = set()
for i in range(start_idx, n):
a = nums[i]
b = -target - a
if a in seen:
continue
if b in index_map and index_map[b][-1] > index_map[a][0]:
[Link]([target, a, b])
[Link](a)
for i in range(n):
a = nums[i]
if a == 0 or (i > 0 and a == nums[i - 1]):
continue
twoSum(i + 1, a)
return res