@@ -4,15 +4,15 @@ type FrequencyMap = Record<number, number>;
4
4
function topKFrequentCountDown ( nums : number [ ] , k : number ) : number [ ] {
5
5
const freqMap = buildFrequencyMap1 ( nums ) ;
6
6
return pickTopKDescending ( freqMap , k ) ;
7
- }
7
+ } ;
8
8
9
9
function buildFrequencyMap1 ( nums : number [ ] ) : FrequencyMap {
10
10
const map : FrequencyMap = { } ;
11
11
for ( const num of nums ) {
12
12
map [ num ] = ( map [ num ] || 0 ) + 1 ;
13
13
}
14
14
return map ;
15
- }
15
+ } ;
16
16
17
17
function pickTopKDescending ( freqMap : FrequencyMap , k : number ) : number [ ] {
18
18
const result : number [ ] = [ ] ;
@@ -33,73 +33,72 @@ function pickTopKDescending(freqMap: FrequencyMap, k: number): number[] {
33
33
}
34
34
35
35
return result ;
36
- }
37
-
36
+ } ;
38
37
39
38
// 2번풀이(Bucket Sort)
40
39
function topKFrequent ( nums : number [ ] , k : number ) : number [ ] {
41
- const frequencyMap = buildFrequencyMap2 ( nums ) ;
42
- const frequencyBuckets = buildFrequencyBuckets ( nums . length , frequencyMap ) ;
40
+ const frequencyMap = buildFrequencyMap2 ( nums ) ;
41
+ const frequencyBuckets = buildFrequencyBuckets ( nums . length , frequencyMap ) ;
43
42
44
- return collectTopKFrequent ( frequencyBuckets , k ) ;
45
- }
46
-
47
- function buildFrequencyMap2 ( nums : number [ ] ) : FrequencyMap {
48
- const freqMap : FrequencyMap = { } ;
49
- for ( const num of nums ) {
50
- freqMap [ num ] = ( freqMap [ num ] || 0 ) + 1 ;
51
- }
52
- return freqMap ;
43
+ return collectTopKFrequent ( frequencyBuckets , k ) ;
44
+ } ;
45
+
46
+ function buildFrequencyMap2 ( nums : number [ ] ) : FrequencyMap {
47
+ const freqMap : FrequencyMap = { } ;
48
+ for ( const num of nums ) {
49
+ freqMap [ num ] = ( freqMap [ num ] || 0 ) + 1 ;
53
50
}
54
-
55
- function buildFrequencyBuckets (
56
- size : number ,
57
- freqMap : FrequencyMap
58
- ) : number [ ] [ ] {
59
- const buckets : number [ ] [ ] = Array ( size + 1 ) . fill ( null ) . map ( ( ) => [ ] ) ;
60
-
61
- for ( const [ numStr , frequent ] of Object . entries ( freqMap ) ) {
62
- const num = Number ( numStr ) ;
63
- buckets [ frequent ] . push ( num ) ;
64
- }
65
-
66
- return buckets ;
51
+ return freqMap ;
52
+ } ;
53
+
54
+ function buildFrequencyBuckets (
55
+ size : number ,
56
+ freqMap : FrequencyMap
57
+ ) : number [ ] [ ] {
58
+ const buckets : number [ ] [ ] = Array ( size + 1 )
59
+ . fill ( null )
60
+ . map ( ( ) => [ ] ) ;
61
+
62
+ for ( const [ numStr , frequent ] of Object . entries ( freqMap ) ) {
63
+ const num = Number ( numStr ) ;
64
+ buckets [ frequent ] . push ( num ) ;
67
65
}
68
-
69
- function collectTopKFrequent ( buckets : number [ ] [ ] , k : number ) : number [ ] {
70
- const result : number [ ] = [ ] ;
71
-
72
- for ( let i = buckets . length - 1 ; i >= 0 && result . length < k ; i -- ) {
73
- for ( const num of buckets [ i ] ) {
74
- result . push ( num ) ;
75
- if ( result . length === k ) break ;
76
- }
66
+
67
+ return buckets ;
68
+ } ;
69
+
70
+ function collectTopKFrequent ( buckets : number [ ] [ ] , k : number ) : number [ ] {
71
+ const result : number [ ] = [ ] ;
72
+
73
+ for ( let i = buckets . length - 1 ; i >= 0 && result . length < k ; i -- ) {
74
+ for ( const num of buckets [ i ] ) {
75
+ result . push ( num ) ;
76
+ if ( result . length === k ) break ;
77
77
}
78
-
79
- return result ;
80
78
}
81
-
79
+
80
+ return result ;
81
+ } ;
82
82
83
83
// 3번풀이 (MinHeap)
84
84
function topKFrequentHeap ( nums : number [ ] , k : number ) : number [ ] {
85
- const freqMap : Record < number , number > = { } ;
86
-
87
- for ( const num of nums ) {
88
- freqMap [ num ] = ( freqMap [ num ] || 0 ) + 1 ;
89
- }
90
-
91
- const heap : [ number , number ] [ ] = [ ] ;
92
- for ( const [ numStr , frequent ] of Object . entries ( freqMap ) ) {
93
- const num = Number ( numStr ) ;
94
-
95
- heap . push ( [ num , frequent ] ) ;
96
- heap . sort ( ( a , b ) => b [ 1 ] - a [ 1 ] ) ;
97
-
98
- if ( heap . length > k ) {
99
- heap . pop ( ) ;
100
- }
85
+ const freqMap : Record < number , number > = { } ;
86
+
87
+ for ( const num of nums ) {
88
+ freqMap [ num ] = ( freqMap [ num ] || 0 ) + 1 ;
89
+ }
90
+
91
+ const heap : [ number , number ] [ ] = [ ] ;
92
+ for ( const [ numStr , frequent ] of Object . entries ( freqMap ) ) {
93
+ const num = Number ( numStr ) ;
94
+
95
+ heap . push ( [ num , frequent ] ) ;
96
+ heap . sort ( ( a , b ) => b [ 1 ] - a [ 1 ] ) ;
97
+
98
+ if ( heap . length > k ) {
99
+ heap . pop ( ) ;
101
100
}
102
-
103
- return heap . map ( ( [ num ] ) => num ) ;
104
101
}
105
-
102
+
103
+ return heap . map ( ( [ num ] ) => num ) ;
104
+ } ;
0 commit comments