class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer,Integer> occurrences=new HashMap<Integer,Integer>();
for(int num:nums){
occurrences.put(num,occurrences.getOrDefault(num, 0)+1);
}
PriorityQueue<int[]> queue=new PriorityQueue<int[]>(new Comparator<int[]>(){
public int compare(int[] m, int[] n){
return m[1]-n[1];
}
});
for(Map.Entry<Integer,Integer> entry: occurrences.entrySet()){
int num=entry.getKey();
int count=entry.getValue();
if(queue.size()==k){
if(count > queue.peek()[1]){
queue.poll();
queue.add(new int[]{num,count});
}
}
else{
queue.add(new int[]{num,count});
}
}
int[] ret=new int[k];
for(int i=0;i<k;i++){
ret[i]=queue.poll()[0];
}
return ret;
}
}
leetcode 347 . Top K Frequent Elements
最新推荐文章于 2026-03-28 10:38:33 发布
该博客详细介绍了如何利用哈希映射和优先队列实现找出整数数组中最频繁出现的k个元素。首先,通过哈希映射计算每个元素的出现频率,然后用自定义比较器的优先队列进行频率排序。当队列大小等于k时,如果新元素频率大于队首元素,则更新队列。最后,从队列中依次取出元素及其频率,得到频率最高的k个元素。
304

被折叠的 条评论
为什么被折叠?



