也是维护一个堆,只不过比的条件是频率,所以事先需要用一个map来存数字出现的频率。
import java.util.PriorityQueue;
import java.util.HashMap;
class Solution {
public int[] topKFrequent(int[] nums, int k) {
if(nums.length==0 || k==0){
return new int[0];
}
Map<Integer,Integer> map=new HashMap<Integer,Integer>();
for(int i=0;i<nums.length;i++){
map.put(nums[i],map.getOrDefault(nums[i],0)+1);
}
PriorityQueue<Integer> pq=new PriorityQueue<Integer>(new Comparator<Integer>(){
public int compare(Integer o1,Integer o2){
return map.get(o1)-map.get(o2);
}
});
for(int i:map.keySet()){
if(pq.size()<k){
pq.offer(i);
}else{
if(map.get(i)>map.get(pq.peek())){
pq.poll();
pq.offer(i);
}
}
}
int[] res=new int[k];
for(int i=0;i<k;i++){
res[i]=pq.poll();
}
return res;
}
}