Skip to content

Commit dc36e33

Browse files
committed
add: solve #237 Top K Frequent Elements with ts
1 parent 60d362f commit dc36e33

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* λ°°μ—΄μ—μ„œ 각 숫자의 λΉˆλ„λ₯Ό κ³„μ‚°ν•œ ν›„ μƒμœ„ k개의 λΉˆλ„ μš”μ†Œλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜
3+
* - μ‹œκ°„ λ³΅μž‘λ„: O(n + m log m)
4+
* - O(n): 숫자 λΉˆλ„λ₯Ό κ³„μ‚°ν•˜λŠ” 루프
5+
* - O(m log m): 고유 숫자(m)에 λŒ€ν•œ μ •λ ¬
6+
* - 곡간 λ³΅μž‘λ„: O(m)
7+
* - 고유 숫자(m)에 λΉ„λ‘€ν•œ Mapκ³Ό μ •λ ¬λœ λ°°μ—΄ μ‚¬μš©
8+
*
9+
* @param {number[]} nums - 숫자 λ°°μ—΄
10+
* @param {number} k - λ°˜ν™˜ν•  μƒμœ„ λΉˆλ„ μš”μ†Œμ˜ 개수
11+
* @returns {number[]} μƒμœ„ k개의 λΉˆλ„ μš”μ†Œ (μˆœμ„œλŠ” 상관 μ—†μŒ)
12+
*/
13+
function topKFrequent(nums: number[], k: number): number[] {
14+
let numMap = new Map(); // 숫자의 λΉˆλ„λ₯Ό μ €μž₯ν•  Map
15+
16+
// 1. 숫자 λΉˆλ„ Map 생성 O(n)
17+
for (const num of nums) {
18+
// Map에 ν˜„μž¬ μˆ«μžκ°€ μ—†μœΌλ©΄ 1둜 μ΄ˆκΈ°ν™”, 있으면 1 증가
19+
const value = numMap.get(num) ? numMap.get(num) + 1 : 1;
20+
numMap.set(num, value);
21+
}
22+
23+
// 2. Map을 [숫자, λΉˆλ„μˆ˜] λ°°μ—΄λ‘œ λ³€ν™˜ν•œ λ’€ λΉˆλ„μˆ˜ κΈ°μ€€ λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬ O(m log m)
24+
const sortedFrequent = [...numMap.entries()] // Map을 λ°°μ—΄λ‘œ λ³€ν™˜
25+
.sort((a, b) => b[1] - a[1]) // λΉˆλ„μˆ˜ κΈ°μ€€ λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬
26+
27+
// 3. μƒμœ„ k개의 숫자만 μΆ”μΆœ O(k)
28+
.slice(0, k)
29+
30+
// 4. 숫자(key)만 μΆ”μΆœ O(k)
31+
.map(entry => entry[0]);
32+
33+
return sortedFrequent;
34+
}

0 commit comments

Comments
Β (0)