Skip to content

Commit d031f8e

Browse files
committed
add top n frequent elements
1 parent 6d683bc commit d031f8e

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.*;
2+
/**
3+
* 1 .문제 정의
4+
5+
배열이 있는데 여기서 각 숫자가 등장한 빈도수를 체크하고 K번째 까지 높은 빈도로 등장한 수를 리턴하는 문제입니다.
6+
7+
- n의 길이는 1 ~ 10000
8+
9+
* 2. naive algorithm 도출
10+
11+
배열을 순회함면서 Map에 넣으면서 빈도수를 체크.
12+
빈도수 계산이 끝나고 나면 빈도수를 기준으로 내림차순 정렬
13+
14+
*
15+
* 3. 시간&공간복잡도 분석
16+
* O(N) + O(M) + O(M log M) + O(K) = O(N + N log N) = O(N log N)
17+
18+
* 4. 코드작성
19+
*/
20+
class sangyyypark {
21+
public int[] topKFrequent(int[] nums, int k) {
22+
Map<Integer,Integer> map = new HashMap<>();
23+
for(int i = 0; i < nums.length; i++) {
24+
int num = nums[i];
25+
if(map.containsKey(num)) {
26+
map.put(num, map.get(num) + 1);
27+
}
28+
else {
29+
map.put(num,1);
30+
}
31+
}
32+
33+
List<Integer> keySet = new ArrayList<>(map.keySet());
34+
keySet.sort(new Comparator<Integer>() {
35+
@Override
36+
public int compare(Integer o1, Integer o2) {
37+
return map.get(o2).compareTo(map.get(o1));
38+
}
39+
});
40+
41+
int [] result = new int[k];
42+
int index = 0;
43+
for(int i = 0; i < k; i++) {
44+
result[index] = keySet.get(i);
45+
index++;
46+
}
47+
return result;
48+
}
49+
}
50+

0 commit comments

Comments
 (0)