Time: 1083 ms (14.78%), Space: 22.4 MB (5.02%) - LeetHub

This commit is contained in:
Deven
2025-11-26 13:36:04 -05:00
parent ff7a4d54ab
commit c67336bdee
+54
View File
@@ -0,0 +1,54 @@
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
# store frequency counts O(n)
frequencies = {}
for num in nums:
frequencies[num] = frequencies.get(num, 0) + 1
# find all pairs O(n^2)
tripleSet = set()
def addTriple(x,y,z): # O(1) *sort always on 3 items
triple = [x, y, z]
triple.sort()
tripleSet.add(tuple(triple))
freq_keys = list(frequencies.keys())
for i in range(len(freq_keys)):
for j in range(i, len(freq_keys)):
if i == j and frequencies[freq_keys[i]] < 2:
continue
pair = [freq_keys[i], freq_keys[j]]
needed = -(pair[0] + pair[1])
# - check for third in frequency counts O(1)
if frequencies.get(needed, -1) == -1:
# no triple for given pair
continue
elif needed == pair[0] or needed == pair[1]:
if pair[0] == pair[1]:
if frequencies[needed] > 2:
addTriple(pair[0], pair[1], needed)
elif frequencies[needed] > 1:
addTriple(pair[0], pair[1], needed)
else:
addTriple(pair[0], pair[1], needed)
return list(map(lambda tup: list(tup), tripleSet))
"""
O(n^3) *too slow
triples = set()
for i in range(len(nums)):
for j in range(i + 1, len(nums)):
for k in range(j + 1, len(nums)):
if nums[i] + nums[j] + nums[k] == 0:
t = [nums[i], nums[j], nums[k]]
t.sort()
triples.add(tuple(t))
return list(map(lambda tup: list(tup), triples))
"""