Skip to content

Commit 3d2514c

Browse files
author
jinbeom
committed
3Sum Solution
1 parent 41e0e8c commit 3d2514c

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

3sum/kayden.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
class Solution:
2+
3+
# 해시맵
4+
# 시간복잡도: O(N^2)
5+
# 공간복잡도: O(N)
6+
def threeSum(self, nums: List[int]) -> List[List[int]]:
7+
n = len(nums)
8+
nums.sort()
9+
10+
check = {}
11+
for idx, num in enumerate(nums):
12+
check[num] = idx
13+
14+
answer = set()
15+
for i in range(n-2):
16+
if nums[i] > 0:
17+
break
18+
if i > 0 and nums[i] == nums[i-1]:
19+
continue
20+
for j in range(i + 1, n):
21+
target = -(nums[i] + nums[j])
22+
if not check.get(target, None):
23+
continue
24+
if j >= check[target]:
25+
continue
26+
27+
answer.add((nums[i], nums[j], target))
28+
29+
return list(answer)
30+
31+
# 투포인터
32+
# 시간복잡도: O(N^2)
33+
# 공간복잡도: O(N)
34+
def threeSum2(self, nums: List[int]) -> List[List[int]]:
35+
n = len(nums)
36+
nums.sort()
37+
38+
answer = set()
39+
for i in range(n-2):
40+
if nums[i] > 0:
41+
break
42+
if i > 0 and nums[i] == nums[i-1]:
43+
continue
44+
l, r = i+1, n-1
45+
while l<r:
46+
if nums[l] + nums[r] == -nums[i]:
47+
answer.add((nums[i], nums[l], nums[r]))
48+
l += 1
49+
r -= 1
50+
51+
if nums[l] + nums[r] < -nums[i]:
52+
l += 1
53+
54+
if nums[l] + nums[r] > -nums[i]:
55+
r -= 1
56+
57+
return list(answer)

0 commit comments

Comments
 (0)