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 .*;
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+
You can’t perform that action at this time.
0 commit comments