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

力扣347. 前 K 个高频元素

在这里插入图片描述
思路:记录元素出现的次数用map;
要维护前k个元素,不至于把所有元素都排序再取前k个,而是新建一个堆,用小根堆存放前k个最大的数。
为什么是小根堆?因为堆每次出数据时只出堆顶,每次把当前最小的堆顶排出去
,把更大的换进来,到最后只会剩下几个最大的元素。
堆的排序复杂度是 log(K),所以整体是 n*long(K);

class Solution {public int[] topKFrequent(int[] nums, int k) {Map<Integer,Integer> map = new HashMap<>();//元素和次数 放入mapfor(int i : nums){map.put(i, map.getOrDefault(i,0)+1);}//int[] 里面只放2两个值k-v,用来代替map的元素PriorityQueue<int[]> xiaoDui = new PriorityQueue<>((nums1,nums2)->nums1[1]-nums2[1]);//小根堆//遍历map里的元素,维护一个K个元素的小根堆,里面放的是大数for(Map.Entry<Integer,Integer> item : map.entrySet()) {if(xiaoDui.size()<k){xiaoDui.add(new int[] {item.getKey(),item.getValue()});}else{//堆顶元素小时,出堆顶,入新元素if(xiaoDui.peek()[1]<item.getValue()) {xiaoDui.poll();xiaoDui.add(new int[] {item.getKey(),item.getValue()});}}}//把key取出来返回int[] ans = new int[k];for(int i=0;i<k;i++){ans[i] = xiaoDui.poll()[0];}return ans;}
}
http://www.lryc.cn/news/333657.html

相关文章:

  • SCP 从Linux快速下载文件到Windows本地
  • plasmo内容UI组件层级过高导致页面展示错乱
  • 《QT实用小工具·十一》Echart图表JS交互之仪表盘
  • 深入浅出理解ArrayBuffer对象TypedArray和DataView视图
  • 人工智能 - 服务于谁?
  • 软考高级架构师:嵌入式系统的内核架构
  • 分布式锁实战
  • 【VMware Workstation】启动虚拟机报错“此主机支持 AMD-V,但 AMD-V 处于禁用状态”
  • 非关系型数据库(缓存数据库)redis的基础认知与安装
  • Go语言如何处理文件
  • Java基础知识总结(42)
  • C++ | Leetcode C++题解之第6题Z字形变换
  • JavaEE——手把手教你实现简单的 servlet 项目
  • X年后,ChatGPT会替代底层程序员吗?
  • OpenAI 推出新网络爬虫GPTBot,为GPT-5做准备
  • 【Easy云盘 | 第二篇】后端统一设计思想
  • c语言:模拟字符串拷贝功能(strcpy),面试题
  • 信创环境ES索引管理脚本:close, delete
  • torch-v1.3.1-build
  • C语言宏定义笔记
  • 设计模式:生活中的观察者模式
  • Qt实现Kermit协议(四)
  • 苏州金龙助力旅游客运加速蜕变
  • 头盔检测 | 基于Caffe-SSD目标检测算法实现的建筑工地头盔检测
  • Stable diffusion 加载扩展列表报错解决方法
  • Git(8)之分支间同步特定提交
  • 万得AI算法工程师一面面试题6道|含解析
  • 蓝桥杯23年第十四届省赛-异或和之和|拆位、贡献法
  • Unity进阶之路(1)回顾与思考
  • 【C语言】——指针八:指针运算笔试题解析