出现频率最多的k个元素
通过大小为k的堆进行维护
class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer,Integer> cnt=new HashMap<>();
for(int i=0;i<nums.length;i++){
cnt.put(nums[i],cnt.getOrDefault(nums[i],0)+1);
}
PriorityQueue<int[]> queue=new PriorityQueue<int[]>((a,b)->a[1]-b[1]);
Set<Map.Entry<Integer,Integer>> entry=cnt.entrySet();
for(Map.Entry<Integer,Integer> en:entry){
int key=en.getKey();int value=en.getValue();
if(queue.size()==k){
if(queue.peek()[1]<value){
queue.poll();
queue.offer(new int[]{key,value});
}
}else{
queue.offer(new int[]{key,value});
}
}
int[] res=new int[k];
int index=0;
while(!queue.isEmpty()){
res[index++]=queue.poll()[0];
}
return res;
}
}