File tree 2 files changed +38
-33
lines changed
2 files changed +38
-33
lines changed Load Diff This file was deleted.
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments