
[LeetCode] Top K Frequent Elements

주어진 정수 배열 중 가장 빈도가 높은 수부터 k번째로 높은 수까지 구하는 문제
nums를 순회하며 빈도를 해시맵에 저장한다.frequencies 리스트에 넣고, value가 높은 순으로 정렬한다.answer에 k번째 수까지 담아 결과를 반환한다.class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer, Integer> hm = new HashMap<>();
for (int num : nums) {
hm.put(num, hm.getOrDefault(num, 0) + 1);
}
List<Integer> frequencies = new ArrayList<>(hm.keySet());
frequencies.sort((a, b) -> hm.get(b) - hm.get(a));
int[] answer = new int[k];
for(int i = 0; i < k; i++) {
answer[i] = frequencies.get(i);
}
return answer;
}
}
PriorityQueue(우선순위 큐)를 활용한 풀이
class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer, Integer> hm = new HashMap<>();
for (int num : nums) {
hm.put(num, hm.getOrDefault(num, 0) + 1);
}
PriorityQueue<Map.Entry<Integer, Integer>> minHeap =
new PriorityQueue<>((a, b) -> a.getValue() - b.getValue());
for (Map.Entry<Integer, Integer> entry : hm.entrySet()) {
minHeap.offer(entry);
if (minHeap.size() > k) {
minHeap.poll();
}
}
int[] result = new int[k];
for (int i = k - 1; i >= 0; i--) {
result[i] = minHeap.poll().getKey();
}
return result;
}
}