原题:这里写链接内容
代码如下:
//使用容量为k的最大堆的数据结构,然后将所有元素都输入一遍,所以时间复杂度为O(nlogk)
public class Solution {
class Element{
int num;
int count;
public Element(int num,int count){
this.num = num;
this.count = count;
}
}
public List<Integer> topKFrequent(int[] nums, int k) {
HashMap<Integer,Integer> num2Count = new HashMap<>();
for(int num:nums){
if(!num2Count.containsKey(num)){
num2Count.put(num,0);
}
num2Count.replace(num,num2Count.get(num)+1);
}
Set<Map.Entry<Integer,Integer>> entrys = num2Count.entrySet();
PriorityQueue<Element> queues = new PriorityQueue<>(k,new Comparator<Element>(){
public int compare(Element a,Element b){
if(a.count > b.count)
return -1;
else if(a.count < b.count)
return 1;
return 0;
}
});
for(Map.Entry<Integer,Integer> entry:entrys){
queues.add(new Element(entry.getKey(),entry.getValue()));
}
List<Integer> res = new LinkedList<>();
for(int i = 0;i<k;i++){
Element e = queues.poll();
res.add(e.num);
}
return res;
}
}