测试样例给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
解题思路:示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:
输入: nums = [1], k = 1
输出: [1]
难点:先将每一个元素的频率用HashMap存储起来,再构建一个小顶堆用来根据元素频率排序,每一次添加都淘汰堆顶最小的元素,最后剩下的就是出现频率最高的k个元素。
代码实现:PriorityQueue的创建,PriorityQueue里要存储Entry对象。
PriorityQueue> deque = new PriorityQueue<>((o1,o2) -> o1.getValue() - o2.getValue());
class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map map = new HashMap<>();
int len = nums.length;
for(int i = 0;i < len;i++){
map.put(nums[i],map.getOrDefault(nums[i],0) + 1);
}
Set> entris = map.entrySet();
PriorityQueue> deque = new PriorityQueue<>((o1,o2) -> o1.getValue() - o2.getValue());
for(Map.Entry entry : entris){
deque.offer(entry);
if(deque.size() > k){
deque.poll();
}
}
int[] res = new int[k];
for(int i = k - 1;i >= 0;i--){
res[i] = deque.poll().getKey();
}
return res;
}
}



