Skip to content

Commit 11a76ef

Browse files
committed
feat: topKFrequent solutions
1 parent 044b91e commit 11a76ef

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from typing import List
2+
from heapq import nlargest
3+
4+
"""
5+
๋ฌธ์ œ ์„ค๋ช…:
6+
์ด ๋ฌธ์ œ๋Š” ์ฃผ์–ด์ง„ k๋ฒˆ์งธ ๋งŒํผ ๋นˆ๋„์ˆ˜๊ฐ€ ๋†’์€ ๊ฐ’๋“ค์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ
7+
๋นˆ๋„์ˆ˜ ์ฒดํฌ ํ›„, ๋ฐ˜ํ™˜ ๊ฐ’ ์ˆœ์„œ๋Š” ์ƒ๊ด€ ์—†๋‹ค๊ณ  ํ–ˆ์œผ๋‹ˆ heap ์‚ฌ์šฉ
8+
9+
{
10+
1: 3, # 1์ด 3๋ฒˆ ๋“ฑ์žฅ
11+
2: 2, # 2๊ฐ€ 2๋ฒˆ ๋“ฑ์žฅ
12+
3: 1, # 3์ด 1๋ฒˆ ๋“ฑ์žฅ
13+
}
14+
15+
๋นˆ๋„์ˆ˜ ๊ธฐ์ค€์œผ๋กœ k๋ฒˆ์งธ๋งŒํผ ํฐ ๊ฐ’์„ ๋ฐ˜ํ™˜
16+
"""
17+
18+
class Solution:
19+
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
20+
count_dic = {}
21+
22+
for num in nums:
23+
if num in count_dic:
24+
count_dic[num] += 1
25+
else:
26+
count_dic[num] = 1
27+
28+
# ๋นˆ๋„์ˆ˜๊ฐ€ ํฐ ์ˆœ์„œ๋Œ€๋กœ k๊ฐœ๋ฅผ ๋ฐ˜ํ™˜
29+
return nlargest(k, count_dic, key=count_dic.get)
30+
31+
"""
32+
์‹œ๊ฐ„๋ณต์žก๋„: O(n log k)
33+
- ๋”•์…”๋„ˆ๋ฆฌ O(n) + heap์„ ์‚ฌ์šฉํ•ด์„œ k๋ฒˆ์งธ ์š”์†Œ๊นŒ์ง€ ๋ฐ˜ํ™˜ O(n log k) = O(n log k)
34+
35+
๊ณต๊ฐ„๋ณต์žก๋„: O(n)
36+
- ์ตœ๋Œ€ n๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ˆซ์ž๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๊ณ , O(n)
37+
- heap์€ ์ตœ๋Œ€ k๊ฐœ๋งŒ ์ €์žฅ -> O(k)
38+
์ „์ฒด์ ์œผ๋กœ O(n)
39+
"""
40+
41+
42+
43+

0 commit comments

Comments
ย (0)