当前位置: 首页 > news >正文

【leetcode hot 100 347】前 K 个高频元素

解法一:用map的value记录key出现的次数,用PriorityQueue构造最小堆。

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        // 把元素放在map中
        Map<Integer,Integer> map = new HashMap<>();
        for(int num:nums){
            if(map.containsKey(num)){
                map.put(num, map.get(num)+1);
            }
            else{
                map.put(num,1);
            }
        }

        // 构造最小堆
        PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>(){
            public int compare(Integer o1, Integer o2){
                return map.get(o1)-map.get(o2);   // 这里不是o1-o2
            }
        });

        // 向堆中加入元素
        for(int key:map.keySet()){
            if(queue.size()<k){
                // 还可以加入元素
                queue.offer(key);
            }
            else if(map.get(queue.peek())<map.get(key)){
                // 元素满k个了,但是新加入的元素更多
                queue.poll();
                queue.offer(key);
            }
        }

        // 输出
        int[] result = new int[k];
        for(int i=0; i<k; i++){
            result[i] = queue.poll();
        }
        return result;
    }
}

注意:

  • 构造最小堆
PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>(){
        public int compare(Integer o1, Integer o2){
            return map.get(o1)-map.get(o2);   // 这里不是o1-o2
        }
    });

相关文章:

  • 夯实 kafka 系列|第六章:自定义注解 @EvalEventListener 开发
  • Java-servlet(九)前端会话,会话管理与Cookie和HttpSession全解析
  • LeetCode 2829.k-avoiding 数组的最小总和:贪心(数学公式O(1)算出)
  • https://blog.csdn.net/Snowy_susu/article/details/103007927
  • window系统下安装elk
  • 备赛蓝桥杯之第十六届模拟赛第1期职业院校组第五题:回忆画廊
  • 前端面经分享(25/03/26)
  • PCIe面试核心内容与Linux驱动知识完全指南
  • 家乡旅游景点小程序(源码+部署教程)
  • LeetCode算法题(Go语言实现)_14
  • 【机器学习】——机器学习思考总结
  • 如何在 Postman 中设置 Content-Type 的完整指南
  • 周卫林|从模型平权到“知本”复利,NoETL 打造 AI 时代的数据底座
  • C语言文件操作简介:从文件打开到文件读写
  • Vue 使用 xlsx 插件导出 excel 文件
  • Git入门——常用指令汇总
  • scala课后总结(1)
  • LangChain + PostgreSQL 实现向量数据库与 RAG 搜索
  • 解锁Linux内核黑科技:VFS虚拟文件系统详解
  • JavaScript 如何检查给定的四个点是否形成一个正方形(How to check if given four points form a square)
  • 什么网站可以找到手工活做/百度搜索高级搜索技巧
  • 宝塔搭建网站/随州seo
  • 怎么改版网站/百度app下载安装 官方
  • 网站策划推广方案/设计师网站
  • 邢台网站定制/北京seo人员
  • java web做网站的优势/吴忠seo