347

来源:6-7 优先队列相关的算法问题 Top K Frequent Elements

pfco

2019-04-13

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;

写回答

1回答

liuyubobobo

2019-04-13

抱歉,请提供给我完整的,让我直接可以执行的代码,而不是代码片段。


请使用注释清晰的说明,在哪里,你认为输出应该是怎样的,实际是怎样的。谢谢。

0
0

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程