class A implements Comparator<Pair<Integer,Integer>>{
@Override
public int compare(Pair<Integer, Integer> o1, Pair<Integer, Integer> o2) {
//return o1.getKey()-o2.getKey();//对方法一
return o2.getKey()-o1.getKey();
}
}
老师,这个是我实现大顶堆的方法,可是下面的队列并没有使用大顶堆进行排序
List res=new ArrayList<>();
Map<Integer,Integer> map=new HashMap<>();
for(int i=0;i<nums.length;i++){
if(!map.containsKey(nums[i])){
map.put(nums[i],1);
}else{
map.put(nums[i],map.get(nums[i])+1);
}
}
PriorityQueue<Pair<Integer,Integer>> queue=new PriorityQueue<>(new A());
for(Map.Entry<Integer,Integer> entry:map.entrySet()){
if(map.keySet().size()k){
res.add(entry.getKey());
}else{
if(queue.size()(map.keySet().size()-k)){
if(entry.getValue()<queue.peek().getKey()){
queue.add(new Pair<>(entry.getValue(),entry.getKey()));
res.add(queue.peek().getValue());
queue.remove();
}
}
else{
queue.add(new Pair<>(entry.getValue(),entry.getKey()));
}
}
}
return res;