Skip to content

Commit 09e1627

Browse files
committed
Solution: 3 Sum
1 parent 5210bb2 commit 09e1627

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

โ€Ž3sum/flynn.pyโ€Ž

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
'''
2+
ํ’€์ด
3+
- ์ค‘๋ณต๋˜๋Š” triplet์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด nums๋ฅผ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค
4+
- nums๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ res ๋ฐฐ์—ด์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค
5+
- ์ค‘๋ณต๋˜๋Š” triplet์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด appended set์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค
6+
7+
Big O
8+
- N: ๋ฐฐ์—ด nums์˜ ํฌ๊ธฐ
9+
10+
- Time complexity: O(N^2)
11+
- nums๋ฅผ ์ •๋ ฌํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ NlogN ํ˜•ํƒœ๋กœ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค
12+
- ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ N^2 ํ˜•ํƒœ๋กœ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค
13+
- O(NlogN + N^2)์—์„œ ์ฆ๊ฐ€์œจ์ด ๊ฐ€์žฅ ํฐ ํ•ญ์€ N^2์ด๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N^2)์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
14+
15+
- Space complexity: O(N)
16+
- nums๋ฅผ ์ •๋ ฌํ•œ ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•˜์—ฌ sorted_nums์— ์ €์žฅํ•˜์˜€๊ณ  ์ด์— ํ•„์š”ํ•œ ๊ณต๊ฐ„์€ N์˜ ํ˜•ํƒœ๋กœ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค
17+
- ์ฒซ๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ ์•ˆ์˜ store์€ ์ตœ๋Œ€ N๋งŒํผ ์ปค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
18+
- appended ์ง‘ํ•ฉ์€ nums์˜ ๋ชจ๋“  ์›์†Œ๊ฐ€ ๊ณ ์œ ํ•˜๋”๋ผ๋„ N๋ณด๋‹ค ์ปค์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
19+
'''
20+
21+
class Solution:
22+
def threeSum(self, nums: List[int]) -> List[List[int]]:
23+
n = len(nums)
24+
25+
sorted_nums = sorted(nums)
26+
27+
res = []
28+
29+
for i in range(n - 2):
30+
first = sorted_nums[i]
31+
32+
if i > 0 and first == sorted_nums[i - 1]:
33+
continue
34+
35+
store = {}
36+
store[-first - sorted_nums[i + 1]] = sorted_nums[i + 1]
37+
38+
appended = set()
39+
40+
for j in range(i + 2, n):
41+
second = sorted_nums[j]
42+
43+
if second in store and second not in appended:
44+
res.append([first, store[second], second])
45+
appended.add(second)
46+
store[-first - second] = second
47+
48+
return res

0 commit comments

Comments
ย (0)