File tree Expand file tree Collapse file tree 1 file changed +50
-0
lines changed
Expand file tree Collapse file tree 1 file changed +50
-0
lines changed Original file line number Diff line number Diff line change 1+ import java .util .HashMap ;
2+ import java .util .List ;
3+ import java .util .Map ;
4+ import java .util .stream .Collectors ;
5+
6+ class Solution {
7+ /**
8+ * 30분 38초 소요.
9+ * nums에서 가장 자주 등장하는 k개 숫자 리턴하기
10+ * Map에 요소:등장수로 관리하기
11+ * Stream으로 등장수 기준으로 내림차순 정렬 후 k개만 리스트로 만들어서 출력한다.
12+ *
13+ * Java의 Stream과 Comparator 사용법을 익혀야함.
14+ * Comparable도 몰랐던 부분.
15+ */
16+ public int [] topKFrequent (int [] nums , int k ) {
17+ /**
18+ * Runtime: 21 ms (Beats 6.30%)
19+ * Memory: 47.42 (Beats 83.73%)
20+ * Space Complexity: O(N)
21+ * - HashMap 공간복잡도 => O(N)
22+ * - sort에서 tim sort 사용 => O(N)
23+ * > O(N)
24+ * Time Complexity: O(NlogN)
25+ * - tim sort를 이용한 정렬 => O(NlogN)
26+ * > O(N) + O(NlogN) + O(N) ~= O(NlogN)
27+ */
28+
29+ Map <Integer , Integer > mp = new HashMap <>();
30+ for (int n : nums ) {
31+ if (mp .containsKey (n )) {
32+ mp .put (n , mp .get (n ) + 1 );
33+ } else {
34+ mp .put (n , 1 );
35+ }
36+ }
37+ List <Integer > li = mp .entrySet ().stream ()
38+ // 값을 기준으로 내림차순 정렬
39+ .sorted (Map .Entry .<Integer , Integer >comparingByValue ().reversed ())
40+ .limit (k )
41+ .map (Map .Entry ::getKey )
42+ .collect (Collectors .toList ());
43+
44+ int [] ans = new int [li .size ()];
45+ for (int i = 0 ; i < li .size (); i ++) {
46+ ans [i ] = li .get (i );
47+ }
48+ return ans ;
49+ }
50+ }
You can’t perform that action at this time.
0 commit comments