Skip to content

Commit 4c17a3c

Browse files
committed
feat: solve 3sum
1 parent 3d7d49b commit 4c17a3c

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

3sum/pmjuu.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from typing import List
2+
3+
class Solution:
4+
def threeSum(self, nums: List[int]) -> List[List[int]]:
5+
result = []
6+
nums.sort() # sort nums before using two-pointers
7+
8+
for i, num in enumerate(nums):
9+
# skip duplicated targets
10+
if i > 0 and nums[i] == nums[i - 1]:
11+
continue
12+
13+
target = -num
14+
left, right = i + 1, len(nums) - 1
15+
16+
while left < right:
17+
if nums[left] + nums[right] == target:
18+
result.append([num, nums[left], nums[right]])
19+
20+
# skip duplicated numbers ( ex. nums = [-3 0 0 0 3 3] )
21+
while left < right and nums[left] == nums[left + 1]:
22+
left += 1
23+
while left < right and nums[right] == nums[right -1]:
24+
right -= 1
25+
26+
left += 1
27+
right -= 1
28+
elif nums[left] + nums[right] < target:
29+
left += 1
30+
else:
31+
right -= 1
32+
33+
return result
34+
35+
36+
# Time Complexity: O(n^2)
37+
# - Sorting takes O(n log n).
38+
# - The outer loop runs O(n) times, and the two-pointer approach inside runs O(n) for each iteration.
39+
# - Combined, the overall time complexity is O(n^2).
40+
41+
# Space Complexity: O(k)
42+
# - The result list uses O(k) space, where k is the number of unique triplets in the output.

0 commit comments

Comments
 (0)