力扣 LeetCode 347. 前K个高频元素(Day5:栈与队列)

解题思路:

小根堆统计前K个高频元素

注意:

PriorityQueue中需要自定义排序规则

java 复制代码
class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        PriorityQueue<int[]> pq = new PriorityQueue<>((x,y)->x[1]-y[1]);
        Map<Integer,Integer> map=new HashMap<>();
        for(int num:nums){
            map.put(num,map.getOrDefault(num,0)+1);
        }

        for(Map.Entry<Integer,Integer> entry:map.entrySet()){
            if(pq.size()<k) pq.add(new int[]{entry.getKey(),entry.getValue()});
            else{
                if(entry.getValue()>pq.peek()[1]){
                    pq.poll();
                    pq.add(new int[]{entry.getKey(),entry.getValue()});

                }
            }
        }
        
        int[] res=new int[k];
        for(int i=0;i<k;i++){
            res[i]=pq.poll()[0];
        }
        return res;
    }
}
相关推荐
Black蜡笔小新4 分钟前
自动化AI算法训练服务器DLTM零代码私有化部署筑牢企业AI落地根基
人工智能·算法·自动化
wWYy.5 分钟前
算法:最大子数组和
算法
吃着火锅x唱着歌9 分钟前
LeetCode 3829.设计共享出行系统
算法·leetcode·职场和发展
炸薯条!11 分钟前
二叉树的链式表示
数据结构·算法
CHHH_HHH12 分钟前
【C++】二叉搜索树全面升级,深度剖析AVL树
开发语言·数据结构·c++·算法·stl
Mumu121813 分钟前
P3211 [HNOI2011] XOR和路径
算法
高一学习c++会秃头吗14 分钟前
页面置换算法实现
算法
Raink老师18 分钟前
【AI面试临阵磨枪-90】Skill 之间如何调用、依赖、组合、编排?
面试·职场和发展
yuanyuan2o221 分钟前
Transformers NLP 任务:阅读理解问答
人工智能·算法·自然语言处理·nlp·github
菜菜的顾清寒31 分钟前
力扣HOT100(52)动态规划 - 最长递增子序列
算法·leetcode·动态规划