Leetcode Java Top K Frequent Elements
업데이트:
문제
코드
class Solution {
public int[] topKFrequent(int[] nums, int k) {
int min = nums[0];
int max = nums[0];
for (int num : nums) {
if (num < min) {
min = num;
} else if (num > max) {
max = num;
}
}
Num[] array = new Num[max - min + 1];
for (int num : nums) {
if (array[num - min] == null) {
array[num - min] = new Num(num);
} else {
array[num - min].count++;
}
}
Arrays.sort(array, new Comparator<Num>() {
@Override
public int compare(Num o1, Num o2) {
if (o1 == null) {
return 1;
} else if (o2 == null) {
return -1;
} else {
return o2.count - o1.count;
}
}
});
int[] result = new int[k];
for (int i = 0; i < k; i++) {
result[i] = array[i].value;
}
return result;
}
}
class Num {
public int value;
public int count;
public Num(int value) {
this.value = value;
this.count = 1;
}
}
결과
설명
-
주어진 정수 배열 nums의 k번쨰 가장 많이 발생한 값들을 반환하는 문제이다.
-
min과 max에 nums의 첫 값을 넣어주고, nums를 순회하면서 최소값과 최대값을 각 변수에 넣어준다.
- Num을 이용해 배열의 크기를 최소화 하기 위해 $max - min + 1$ 크기로 정의한다.
- Num은 특정 값인 value의 발생 빈도인 count를 저장하는 객체이다.
-
nums를 순회하여 array의 $num - min$번째 Num 객체에 count를 증가시킨다.
-
array의 값들을 count 수로 내림차순 정렬한다.
- result 변수는 k의 크기로 정의하고 array의 k번째 Num의 value를 넣어 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기