Skip to content

Commit be216c9

Browse files
committed
feat: topKFrequent 풀이
1 parent e8e98af commit be216c9

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
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+
}

0 commit comments

Comments
 (0)