File tree Expand file tree Collapse file tree 1 file changed +34
-0
lines changed Expand file tree Collapse file tree 1 file changed +34
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You canβt perform that action at this time.
0 commit comments