Skip to content

Commit 2dfdd37

Browse files
committed
3 Sum solution
1 parent 1691310 commit 2dfdd37

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

3sum/krokerdile.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
class Solution:
2+
def threeSum(self, nums: List[int]) -> List[List[int]]:
3+
nums.sort()
4+
res = []
5+
n = len(nums)
6+
7+
for i in range(n):
8+
if i > 0 and nums[i] == nums[i-1]:
9+
continue
10+
11+
target = -nums[i]
12+
seen = set()
13+
j = i + 1
14+
15+
while j < n:
16+
complement = target - nums[j]
17+
if complement in seen:
18+
res.append([nums[i], complement, nums[j]])
19+
while j + 1 < n and nums[j] == nums[j+1]:
20+
j += 1
21+
seen.add(nums[j])
22+
j += 1
23+
return list(set(tuple(x) for x in res))
24+
25+
26+
class Solution:
27+
def threeSum(self, nums: List[int]) -> List[List[int]]:
28+
nums.sort()
29+
result = []
30+
31+
for i in range(len(nums)):
32+
# 중복된 첫 번째 수는 skip
33+
if i > 0 and nums[i] == nums[i - 1]:
34+
continue
35+
36+
left, right = i + 1, len(nums) - 1
37+
38+
while left < right:
39+
total = nums[i] + nums[left] + nums[right]
40+
41+
if total == 0:
42+
result.append([nums[i], nums[left], nums[right]])
43+
44+
# 중복된 두 번째, 세 번째 수 건너뛰기
45+
while left < right and nums[left] == nums[left + 1]:
46+
left += 1
47+
while left < right and nums[right] == nums[right - 1]:
48+
right -= 1
49+
50+
left += 1
51+
right -= 1
52+
53+
elif total < 0:
54+
left += 1 # 합이 작으면 왼쪽을 오른쪽으로
55+
else:
56+
right -= 1 # 합이 크면 오른쪽을 왼쪽으로
57+
58+
return result

0 commit comments

Comments
 (0)