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

力扣【347. 前 K 个高频元素】Java题解(堆)

TopK问题,我们直接上堆。
首先遍历一次然后把各个数字的出现频率存放在哈希表中便于后面堆的操作。
因为是出现频率前 k 高,所以用小顶堆,当我们遍历的频率值大于堆顶值时就可以替换堆顶。

代码:

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        Map<Integer,Integer> map = new HashMap<>();
        for(int num:nums){
            map.put(num,map.getOrDefault(num,0)+1);
        }
        PriorityQueue<int[]> que = new PriorityQueue<int[]>((a,b)->{
            return a[1]-b[1];
        });
        for(Map.Entry<Integer,Integer> entry : map.entrySet()){
            if(que.size() < k) {
                que.offer(new int[]{entry.getKey(),entry.getValue()});
                continue;
            }
            if(que.peek()[1] < entry.getValue()){
                que.poll();
                que.offer(new int[]{entry.getKey(),entry.getValue()});
            }

        }
        int[] res = new int[k];
        int i =0;
        for(int[] arr:que){
            res[i++] = arr[0];
        }
        return res;
    }
}

扩展:
1.获取map的所有元素(键值对),map.enreySet(),类型是Map.Entry<T1,T2>
获取键值对的键entry.getKey(),获取值entry.getValue()

2.Java堆常用函数:

  • offer(E e) 元素入堆
  • peek() 返回堆顶元素
  • poll() 堆顶元素出堆

http://www.kler.cn/a/521038.html

相关文章:

  • 【shell工具】编写一个批量扫描IP地址的shell脚本
  • 为AI聊天工具添加一个知识系统 之71 详细设计 之12 形式文法、范式语法和惯式用法
  • 新项目上传gitlab
  • spark运行流程
  • 03-画P封装(制作2D+添加3D)
  • 正则表达式 - 命名捕获组
  • spring boot中使用spring-security案例
  • Kafka常见问题之 `javax.management.InstanceAlreadyExistsException`
  • 掌握动态规划的20种模式
  • 面向对象编程——私有化属性
  • 系统架构设计中的非功能需求分析与设计
  • Spring Boot 中的事件发布与监听:深入理解 ApplicationEventPublisher(附Demo)
  • 用Devc++与easyx一步一步做游戏[启动界面部分]-解决hover闪烁问题及优化
  • Arduino大师练成手册 -- 控制 PN532 NFC 模块
  • 第 25 场 蓝桥月赛
  • 什么是AI Agent?
  • Vue.js 什么是 Vuex?
  • 基于新年视角下的城市人流数据分析
  • Baklib赋能下的内容中台智能化推荐系统解析与展望
  • Mac cursor设置jdk、Maven版本
  • Qt中QVariant的使用
  • 【橘子ES】使用docker搭建ELK环境
  • 2025美赛数学建模C题:奥运奖牌榜模型——思路+代码+模型
  • 二维数组一
  • Linux系统之ifconfig命令的基本使用
  • 2274. 不含特殊楼层的最大连续楼层数