给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
java中实现大顶堆和小顶堆的数据结构---------优先级队列PriorityQueue
class Solution {
public int[] topKFrequent(int[] nums, int k) {
hashmap统计频率
HashMap<Integer, Integer> hashMap = new HashMap<>();
for (int e :
nums) {
hashMap.merge(e, 1, Integer::sum);
}
将每一个key-value,作为集合的元素
Set<Map.Entry<Integer, Integer>> entries = hashMap.entrySet();
新建一个优先级队列,o1-o2用小顶堆实现;o2-o1用大顶堆实现
PriorityQueue<Map.Entry<Integer, Integer>> priorityQueue = new PriorityQueue<>((o1, o2) -> o2.getValue() - o1.getValue());
for (Map.Entry<Integer, Integer> e:
entries) {
priorityQueue.offer(e);
}
int[] res = new int[k];
for (int i = 0; i < k; i++) {
res[i] = Objects.requireNonNull(priorityQueue.poll()).getKey();
}
return res;
}
}