Skip to content

Commit 90b6bce

Browse files
committedApr 1, 2025
add solution : 347. Top K Frequent Elements
1 parent 9e763c1 commit 90b6bce

File tree

2 files changed

+38
-33
lines changed

2 files changed

+38
-33
lines changed
 

‎top-k-frequent-elements/mmyeon.js

Lines changed: 0 additions & 33 deletions
This file was deleted.

‎top-k-frequent-elements/mmyeon.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
*
3+
* 접근 방법 :
4+
* - 정렬 사용하지 않고 o(n)을 풀기 위해서 숫자 빈도수를 배열 인덱스로 저장
5+
* - 숫자 빈도스를 맵에 저장
6+
* - 맵을 순회하면서, 빈도수를 배열에 저장 (동일 반도수 처리하기 위해서 2차원 배열 사용)
7+
* - 배열을 역순으로 순회하면서 빈도수 기반의 값을 결과 배열에 저장
8+
* - 결과 배열을 k개만큼 잘라서 리턴
9+
*
10+
* 시간복잡도 : O(n)
11+
* - nums 배열 1회 순회하면서 맵에 저장하니까 O(n)
12+
*
13+
* 공간복잡도 : O(n)
14+
* - nums 배열 길이만큼 맵과 2차원 배열에 정리하니까 O(n)
15+
*/
16+
function topKFrequent(nums: number[], k: number): number[] {
17+
const numMap = new Map();
18+
19+
for (const num of nums) {
20+
numMap.set(num, (numMap.get(num) ?? 0) + 1);
21+
}
22+
23+
const storedArr: number[][] = Array(nums.length + 1)
24+
.fill(null)
25+
.map(() => []);
26+
27+
for (const [num, frequency] of numMap) {
28+
storedArr[frequency].push(num);
29+
}
30+
31+
const result: number[] = [];
32+
33+
for (let i = storedArr.length - 1; i >= 0; i--) {
34+
if (storedArr[i].length > 0) result.push(...storedArr[i]);
35+
}
36+
37+
return result.slice(0, k);
38+
}

0 commit comments

Comments
 (0)
Please sign in to comment.