class Solution {
public int[] topKFrequent(int[] nums, int k) {
HashMap<Integer,Integer> map = new HashMap<>();//数--频率
for(int i=0;i<nums.length;i++){
Integer count = map.get(nums[i]);
if(count==null){
map.put(nums[i],1);
}else{
map.put(nums[i],1+count);
}
}
PriorityQueue<Map.Entry<Integer,Integer>> priority = new PriorityQueue<>((x,y)->(x.getKey()-y.getValue()));///用一个小顶堆,维护堆大小为k
for(Map.Entry<Integer,Integer> entry : map.entrySet()){
int value = entry.getValue();
int key = entry.getKey();
if(priority.size()<k){//堆的大小小于阈值
priority.offer(entry);
}else if(priority.peek().getValue()<value){//对的大小满足,且频率比对顶entry的频率value 要大
priority.poll();
priority.offer(entry);
}
}
int[] res = new int[k];
int i=0;
for(Map.Entry<Integer,Integer> entry : priority){
res[i++] = entry.getKey();
}
return res;
}
}