Skip to content

Commit 45ffd9c

Browse files
committed
feat: implement topKFrequent function to find top k frequent elements in a list
1 parent 303055a commit 45ffd9c

1 file changed

Lines changed: 27 additions & 0 deletions

File tree

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import heapq
2+
from collections import Counter
3+
4+
class Solution:
5+
def topKFrequent(self, nums: list[int], k: int) -> list[int]:
6+
"""๋ฐ˜๋ณต๋˜๋Š” ํšŸ์ˆ˜๊ฐ€ ๋†’์€ ์ˆœ์œผ๋กœ Top k์ธ ์ˆซ์ž๋“ค์„ ์ฐพ๋Š” ํ•จ์ˆ˜
7+
8+
๋ฐฉ๋ฒ•
9+
1. ์ „์ฒด ๋ชฉ๋ก์„ ์ˆœํšŒํ•˜๋ฉด์„œ, ๊ฐ ์ˆซ์ž๊ฐ€ ๋ช‡ ๋ฒˆ ๋‚˜์˜ค๋Š”์ง€ ์„ธ์–ด, dict map ๋งŒ๋“ค๊ธฐ.
10+
์ดํ›„ value ๊ฐ’ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด, ์ƒ์œ„ k๊ฐœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ• => O(n) + O(n log n) => O(n log n)
11+
2. 1๋ฒˆ์˜ ๋ฐฉ๋ฒ•์—์„œ dict map์„ ๋งŒ๋“œ๋Š” ๊ฑธ, python ๋‚ด์žฅ ๋ชจ๋“ˆ์ธ Counter๋กœ ๋Œ€์ฒดํ•˜๊ธฐ.
12+
Counter๊ฐ€ ์•ฝ๊ฐ„ ๋” ๋น ๋ฆ„; C implementation์ด๊ธฐ ๋•Œ๋ฌธ.
13+
3. 1๋ฒˆ ๋ฐฉ๋ฒ•์˜ sorted ๋Œ€์‹ , heapq ๋ชจ๋“ˆ์˜ nlargest ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๊ธฐ.
14+
์ „์ฒด ๋ชฉ๋ก์„ ์ˆœํšŒํ•˜์ง€ ์•Š๊ณ , top k์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’๋งŒ ํŒŒ์•…ํ•˜๊ธฐ์— ํšจ์œจ์ ์ž„. O(n) + O(n log k) => O(n log k)
15+
4. quick select ์•Œ๊ณ ๋ฆฌ์ฆ˜. O(n) + O(n) => O(n); ํ•ด๋‹น ๋ฌธ์ œ์— ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ•จ.
16+
17+
Args:
18+
nums (list[int]): ์ •๋ ฌ๋˜์ง€ ์•Š์€ ์ค‘๋ณต ํฌํ•จ ์ •์ˆ˜ ๋ฐฐ์—ด
19+
k (int): Top k์˜ ๊ฐœ์ˆ˜
20+
21+
Returns:
22+
list[int]: Top k์— ํ•ด๋‹นํ•˜๋Š” ์ˆซ์ž๋“ค์˜ ๋ฆฌ์ŠคํŠธ
23+
"""
24+
if len(nums) <= 1:
25+
return nums
26+
count = Counter(nums)
27+
return heapq.nlargest(k, count.keys(), key=count.get)

0 commit comments

Comments
ย (0)