利用最小堆来做(堆容量为K)
只要保证堆顶的数一定比外部的数据大,那么就能保证堆内的数一定是最大的K个
Map<Integer,Integer> numtocount=new HashMap<>();
for (int num :nums){
numtocount.put(num,numtocount.getOrDefault(num,0)+1);
}
Queue<Map.Entry<Integer,Integer>> min_heap =new PriorityQueue<>((e1,e2)->e1.getValue()- e2.getValue());
//entryset
for (Map.Entry<Integer,Integer> entry:numtocount.entrySet()){
if(min_heap.size()<k){
min_heap.offer(entry);
}else {
if(min_heap.peek().getValue()<entry.getValue()){
min_heap.poll();
min_heap.offer(entry);
}
}
}
int[] result =new int[k];
for (int i=k-1;i>=0;i--){
result[i]=min_heap.poll().getKey();
}
return result;