Skip to content

Commit c2e4b6c

Browse files
committed
feat: Add 3 Sum solutions
1 parent 0eb2ff9 commit c2e4b6c

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

โ€Ž3sum/thispath98.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
class Solution:
2+
def threeSumSet(self, nums: List[int]) -> List[List[int]]:
3+
"""
4+
Intuition:
5+
๋‘ ๊ฐ’์„ ๋”ํ•˜๊ณ , ์„ธํŠธ ์•ˆ์— ๊ฐ’์—์„œ 0์„ ๋งŒ์กฑ์‹œํ‚ค๋Š” ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ
6+
์ •๋‹ต์— ์ถ”๊ฐ€ํ•œ๋‹ค.
7+
์„ธํŠธ(ํ•ด์‹œ)์˜ ์ ‘๊ทผ์ด O(1) ์ž„์„ ์ด์šฉํ•œ๋‹ค.
8+
9+
Time Complexity:
10+
O(N^2):
11+
2์ค‘ for๋ฌธ์ด ์žˆ์œผ๋ฏ€๋กœ, O(N^2)์ด๋‹ค.
12+
for๋ฌธ ๋‚ด๋ถ€์— ์‹œ๊ฐ„๋ณต์žก๋„์— ์˜ํ–ฅ์„ ์ค„๋งŒํ•œ ์ฝ”๋“œ๋Š” ์—†์œผ๋ฉฐ
13+
์ •๋ ฌ์€ O(3 log 3)์ด๋ฏ€๋กœ ๋ฌด์‹œ ๊ฐ€๋Šฅํ•˜๋‹ค.
14+
15+
Space Complexity:
16+
O(N):
17+
์ค‘๋ณต๋œ ๊ฐ’์ด ์—†๋‹ค๋ฉด seen ์„ธํŠธ๋Š” N - 1๊ฐœ์˜ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
18+
19+
Key takeaway:
20+
ํ•ด์‹œ๋ฅผ ์ด์šฉํ•œ ํ’€์ด๋Š” ์ž˜ ๋ชปํ’€์–ด์„œ ์กฐ๊ธˆ ๋” ์—ฐ์Šตํ•ด์•ผ๊ฒ ๋‹ค.
21+
๋˜ํ•œ, ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•ด์‹œํ•˜๊ธฐ ์œ„ํ•ด tuple๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด์„œ ์ฒ˜์Œ ์•Œ์•˜๋‹ค.
22+
"""
23+
answer = set()
24+
for i in range(len(nums) - 2):
25+
seen = set()
26+
for j in range(i + 1, len(nums)):
27+
complement = -(nums[i] + nums[j])
28+
if complement in seen:
29+
answer.add(tuple(sorted([nums[i], nums[j], complement])))
30+
seen.add(nums[j])
31+
32+
return list(answer)
33+
34+
35+
class Solution:
36+
def threeSumTwoPointer(self, nums: List[int]) -> List[List[int]]:
37+
"""
38+
Intuition:
39+
i๋ฅผ for๋ฌธ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ, ๋งค iteration๋งˆ๋‹ค two pointer๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
40+
41+
Time Complexity:
42+
O(N^2):
43+
2์ค‘ for๋ฌธ์ด ์žˆ์œผ๋ฏ€๋กœ, O(N^2)์ด๋‹ค.
44+
for๋ฌธ ๋‚ด๋ถ€์— ์‹œ๊ฐ„๋ณต์žก๋„์— ์˜ํ–ฅ์„ ์ค„๋งŒํ•œ ์ฝ”๋“œ๋Š” ์—†์œผ๋ฉฐ
45+
์ •๋ ฌ์€ O(3 log 3)์ด๋ฏ€๋กœ ๋ฌด์‹œ ๊ฐ€๋Šฅํ•˜๋‹ค.
46+
47+
Space Complexity:
48+
O(1):
49+
ํฌ์ธํ„ฐ 3๊ฐœ๋งŒ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ด๋‹ค.
50+
51+
Key takeaway:
52+
ํˆฌํฌ์ธํ„ฐ๋ฅผ ์‘์šฉํ•œ ๋ฌธ์ œ์ž„์„ ๋– ์˜ฌ๋ฆฌ๊ธด ํ–ˆ์œผ๋‚˜,
53+
nested two pointer์ž„์„ ์ธ์ง€ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.
54+
์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋„ ๋” ๊ณ ๋ฏผ์„ ํ•ด๋ด์•ผ๊ฒ ๋‹ค.
55+
"""
56+
nums.sort()
57+
58+
answer = set()
59+
for i in range(len(nums) - 2):
60+
# ๋งŒ์•ฝ i๊ฐ€ ์ด์ „์˜ ๊ฐ’๊ณผ ์ค‘๋ณต๋œ ๊ฐ’์ด๋ผ๋ฉด ์ด ์ž‘์—…์€ ํ•„์š” ์—†๋‹ค.
61+
if i > 0 and nums[i] == nums[i - 1]:
62+
continue
63+
64+
j = i + 1
65+
k = len(nums) - 1
66+
while j < k:
67+
if nums[i] + nums[j] + nums[k] == 0:
68+
answer.add(tuple(sorted([nums[i], nums[j], nums[k]])))
69+
j += 1
70+
elif nums[i] + nums[j] + nums[k] > 0:
71+
k -= 1
72+
else:
73+
j += 1
74+
75+
return list(answer)

0 commit comments

Comments
ย (0)