// 前k个高频元素-堆
// 输入: nums = [1,1,1,2,2,3], k = 2
// 输出: [1,2]
public static int[] topKFrequent(int[] nums,int k){
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int num:
nums) {
map.put(num,map.getOrDefault(num,0)+1);
}
PriorityQueue<int[]> q = new PriorityQueue<>(new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[1] - o2[1];
}
});
for (Map.Entry<Integer,Integer> entry:
map.entrySet()
) {
int num=entry.getKey(),
count=entry.getValue();
if(q.size()==k){
if(q.peek()[1]<count){
q.poll();
q.offer(new int[]{num,count});
}
}else{
q.offer(new int[]{num,count});
}
}
int[] ret=new int[k];
for (int i = 0; i <k ; i++) {
ret[i]=q.poll()[0];
}
return ret;
}
前k个高频元素-堆
本文介绍了如何使用Java编程语言实现一个算法,通过HashMap存储元素及其出现次数,然后利用优先队列进行排序,以找到数组中出现频率最高的k个元素。
摘要由CSDN通过智能技术生成