Skip to content

Commit 858598f

Browse files
committed
top-k-frequent-elements solution
1 parent 8d84daf commit 858598f

1 file changed

Lines changed: 52 additions & 0 deletions

File tree

top-k-frequent-elements/togo26.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} k
4+
* @return {number[]}
5+
*/
6+
7+
/*
8+
TC: O(nlogn) -> sort
9+
SC: O(n) => numsCount 생성
10+
*/
11+
var topKFrequent = function (nums, k) {
12+
const numsCount = nums.reduce((acc, cur) => {
13+
acc[cur] = acc[cur] + 1 || 1;
14+
return acc;
15+
}, {});
16+
17+
const frequecyOrder = Object.entries(numsCount)
18+
.sort(([, a], [, b]) => b - a)
19+
.map(([k, v]) => [Number(k), v]);
20+
21+
const result = [];
22+
23+
for (let i = 0; i < k; i++) result.push(frequecyOrder[i][0]);
24+
25+
return result;
26+
};
27+
28+
/*
29+
TC: O(n) -> frequency bucket index로 활용
30+
SC: O(n)
31+
*/
32+
var topKFrequent = function (nums, k) {
33+
const numsCount = nums.reduce((acc, cur) => {
34+
acc[cur] = acc[cur] + 1 || 1;
35+
return acc;
36+
}, {});
37+
38+
const bucket = [];
39+
Object.entries(numsCount).forEach(([num, freq]) => {
40+
if (!bucket[freq]) bucket[freq] = [];
41+
bucket[freq].push(Number(num));
42+
});
43+
44+
const result = [];
45+
for (let i = bucket.length - 1; i >= 0 && result.length < k; i--) {
46+
if (Array.isArray(bucket[i])) {
47+
result.push(...bucket[i]);
48+
}
49+
}
50+
51+
return result;
52+
};

0 commit comments

Comments
 (0)