标签:map pq Java nums 队列 get LeeCode347 int new
题目链接:LeeCode347前k个高频元素
题目描述:
优先队列维护小根堆,每次有比队首大的就弹出队首然后入队
class Solution {
public static int[] topKFrequent(int[] nums, int k) {
int[] frequent=new int[k];
Map<Integer,Integer> map=new HashMap<>();
//小根堆,即按比较器中内容升序排列,该题中则为按出现次数升序排列
PriorityQueue<Integer> pq=new PriorityQueue(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return map.get(o1)-map.get(o2);
}
});
//统计次数
for (int i = 0; i < nums.length; i++) {
if(map.containsKey(nums[i]))map.put(nums[i],map.get(nums[i])+1);
else map.put(nums[i],1 );
}
//维护小根堆
for (Integer integer : map.keySet()) {
if(pq.size()<k){
pq.offer(integer);
}else{
if(map.get(pq.peek())<map.get(integer)){
pq.poll();
pq.offer(integer);
}
}
}
//倒叙存放
for (int i = k-1; i >=0; i--) {
frequent[i]=pq.poll();
}
return frequent;
}
}
标签:map,pq,Java,nums,队列,get,LeeCode347,int,new 来源: https://blog.csdn.net/weixin_43590593/article/details/113725616
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。