Skip to content

Commit e8332fd

Browse files
committed
Adds medium two pointer exercise - triples - 3sum
1 parent ac7b4fc commit e8332fd

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

15.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
from typing import List
2+
import unittest
3+
4+
5+
class Solution:
6+
def threeSum(self, nums: List[int]) -> List[List[int]]:
7+
triplets = []
8+
nums.sort()
9+
size = len(nums)
10+
11+
for i in range(size - 1):
12+
if i > 0 and nums[i] == nums[i - 1]:
13+
continue
14+
15+
j = i + 1
16+
z = size - 1
17+
18+
while j < z:
19+
sum = nums[i] + nums[j] + nums[z]
20+
21+
if sum > 0:
22+
z -= 1
23+
elif sum < 0:
24+
j += 1
25+
else:
26+
triplets.append([nums[i], nums[j], nums[z]])
27+
j += 1
28+
z -= 1
29+
30+
while nums[j] == nums[j - 1] and j < z:
31+
j += 1
32+
33+
return triplets
34+
35+
36+
class Tests(unittest.TestCase):
37+
def test_one(self):
38+
self.assertEqual(
39+
Solution().threeSum(nums=[-1, 0, 1, 2, -1, -4]), [[-1, -1, 2], [-1, 0, 1]]
40+
)
41+
42+
def test_two(self):
43+
self.assertEqual(Solution().threeSum(nums=[0, 0, 1]), [])
44+
45+
def test_three(self):
46+
self.assertEqual(Solution().threeSum(nums=[0, 0, 0]), [[0, 0, 0]])
47+
48+
49+
if __name__ == "__main__":
50+
unittest.main()

0 commit comments

Comments
 (0)