347. 前 K 个高频元素
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/top-k-frequent-elements
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
class Solution {
public int[] topKFrequent(int[] nums, int k) {
if (nums == null || nums.length == 0) {
return new int[0];
}
Map<Integer, Integer> timesMap = new HashMap<>();
for (int num : nums) {
timesMap.put(num, timesMap.getOrDefault(num, 0) + 1);
}
PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(timesMap.get(o1), timesMap.get(o2));
}
});
for (Map.Entry<Integer, Integer> entry : timesMap.entrySet()) {
if (queue.size() < k) {
queue.offer(entry.getKey());
} else {
int peek = queue.peek();
if (timesMap.get(peek) < entry.getValue()) {
queue.poll();
queue.offer(entry.getKey());
}
}
}
int[] ret = new int[queue.size()];
int index = 0;
while (!queue.isEmpty()) {
ret[index++] = queue.poll();
}
return ret;
}
}
心之所向,素履以往 生如逆旅,一苇以航