每日一练:LeeCode-347. 前 K 个高频元素(中) - 【优先级队列】

本文是力扣LeeCode-347. 前 K 个高频元素 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode。

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]

示例 2:
输入: nums = [1], k = 1
输出: [1]

提示:
1 <= nums.length <= 105
k 的取值范围是 [1, 数组中不相同的元素的个数]
题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的

进阶:你所设计算法的时间复杂度 必须 优于 O(n log n) ,其中 n 是数组大小。

思路:

  • 统计元素出现的频率 ---------> 使⽤map来进⾏统计
  • 对元素的频率进行排序 ---------> 由于map的value频率排序完,没法再找到对应的key,所以应该使⽤⼀种 容器适配器 就是 优先级队列,针对这道题,使用优先级队列最优,快排也比不上。
  • 找出前K个⾼频元素 ---------> 相比大顶堆需要所有元素都排序一遍,使用小顶堆只排序k个元素,性能更优。 因为要统计最⼤前k个元素,只有⼩顶堆每次将最⼩的元素弹出,最后⼩顶堆⾥积累的才是前k个最⼤元素。

优先级队列:优先级队列内部元素是⾃动依照元素的权值排列,优先级队列对外接⼝只是从队头取元素,从队尾添加元素,再⽆其他取元素的⽅式,看起来就是⼀个队列。默认使用大顶堆排序,若修改使用小顶堆排序,需要重写优先级队列的compare()方法。

class Solution {public int[] topKFrequent(int[] nums, int k) {// 使用map字典,统计每个元素出现的次数,元素为键,元素出现的次数为值Map<Integer,Integer> map = new HashMap<>();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);}}PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>(){// @Override:不写leeCode也可通过public int compare(Integer a,Integer b){return map.get(a)-map.get(b);}});// 遍历map,用最小堆保存频率最大的k个元素for(Integer key : map.keySet()){// if(pq.size()<k){//     pq.add(key);// }else if(map.get(key)>map.get(pq.peek())){//     pq.remove();//     pq.add(key);// }pq.add(key);if(pq.size()>k){pq.remove();}}// 取出最小堆中的元素int[] res = new int[k];int j=0;while(!pq.isEmpty()){res[j++] = pq.remove();}return res;}
}

大家有更好的方法,请不吝赐教。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/585921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python统计学-单个总体样本容量的确定

简介 样本容量是指从总体中抽取的样本数量。单个总体样本容量的确定是指在给定的置信水平和误差范围内&#xff0c;确定从总体中抽取的样本数量。样本容量的确定有多种方法&#xff0c;常用的方法有&#xff1a; 正态分布法&#xff1a;如果总体服从正态分布&#xff0c;则可以…

模板 BIEE(二):Web日志从分析出发,在web页查看取数的sql方法

1 说明 1.1 环境 BIEE: Oracle Business Intelligence Enterprise Edition(Oracle商业智能企业版) 版本: OBIEE 12c Server 版本: 基于Oracle Analytics Server 6.4.0 版本 模板: 制造→生产成本→按前 10 个 GL 帐户列出的生产成本 1.2 背景 由《模板 BIEE (一):…

被罚11万元!跳槽员工忘关屏幕共享,向Nvidia展示窃取源码,遭前东家当场抓获

你有过在公司会议的屏幕共享中&#xff0c;因不慎曝光了一些隐私而深感尴尬的经历吗&#xff1f; 如果有的话&#xff0c;那你或许能想象到英伟达员工 Mohammad Moniruzzaman 被抓包时的感受——只不过&#xff0c;他的后果要严重得多。 据外媒 SiliconValley 报道&#xff0…

56.网游逆向分析与插件开发-游戏增加自动化助手接口-通过UI分析自动药水设定功能

内容来源于&#xff1a;易道云信息技术研究院VIP课 上一节内容&#xff1a;自动药水设定功能的逆向分析-CSDN博客 这次是假设没有之前的思路积累的话&#xff0c;怎样去找按钮事件。 通过ui当做切入点去做&#xff0c;就是一个窗口它显示不显示&#xff0c;游戏怎样控制这个…

传统项目基于tomcat cookie单体会话升级分布式会话解决方案

传统捞项目基于servlet容器 cookie单体会话改造分布式会话方案 ##引入redis,spring-session依赖 <!--redis依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>&…

ZigBee协议栈 -- Zstack协议栈(Zstack2.5.1a)

文章目录 Zstack 协议栈介绍ZStack 的安装ZStack 的结构系统初始化启动操作系统 设备的选择定位编译选项ZStack 中的寻址ZStack 中的路由OSAL 调度管理ZStack 中的串口通信设置配置信道配置 PANID 和要加入的网络最大有效载荷大小非易失性存储器 Zstack 协议栈介绍 CC2530 芯片…

设计模式(4)--对象行为(8)--状态

1. 意图 允许一个对象在其内部状态改变时改变它的行为。 2. 三种角色 上下文环境(Context)、抽象状态(State)、具体状态(Concrete State) 3. 优点 3.1 将与特定状态相关的行为局部化&#xff0c;并且将不同状态的行为分割开来。 3.2 使得状态转换显式化。 3.3 State对象可被共…

手机号码校验工具类(正则表达式)

手机号码有很多种方式&#xff0c;可以使用正则表达式&#xff0c;进行判断。网上有很多&#xff0c;不用去记&#xff0c;查就行。 import org.apache.commons.lang3.StringUtils; ​ import java.util.regex.Matcher; import java.util.regex.Pattern; ​ /*** 手机号码校验…

香橙派 ubuntu实现打通内网,外网双网络,有线和无线双网卡

当香橙派 ubuntu 连了有线&#xff0c;和无线时&#xff0c;默认请求外网时&#xff0c;只走一个网卡&#xff0c;如走了内网网卡&#xff0c;就只能访问内访问&#xff0c;访问不了外网&#xff1b;走了外网网卡就只能访问外网&#xff0c;访问不了内网&#xff1b; 实现双网…

大数据Doris(四十四):查询物化视图和自动匹配

文章目录 查询物化视图和自动匹配 一、​​​​​​​查询物化视图

炫酷按钮制作(HTML+CSS+Javascript)

实现效果&#xff1a; 当鼠标点击按钮时&#xff1a; 实现代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>div{margin-top: 20px;margin-left: 20px;}.button{border: soli…

9. 进程

9. 进程 1. 进程与程序1.1 main() 函数由谁调用1.2 程序如何结束1.2.1 注册进程终止处理函数 atexit() 1.3 何为进程1.4 进程号 2. 进程的环境变量2.1 应用程序中获取环境变量2.1.1 获取指定环境变量 2.2 添加/删除/修改环境变量2.2.1 putenv()2.2.2 setenv()2.2.3 命令行式添加…

IC入门必备!数字IC中后端设计实现全流程解析(1.3万字长文)

吾爱IC社区自2018年2月份开始在公众号上开始分享数字IC后端设计实现相关基础理论和实战项目经验&#xff0c;累计输出文字超1000万字。全部是小编一个个字敲出来的&#xff0c;绝对没有复制粘贴的情况&#xff0c;此处小编自己得给自己鼓鼓掌鼓励下自己。人生不要给自己设限&am…

自激振荡电路笔记 电弧打火机

三极管相关 三极管的形象描述 二极管 简单求解&#xff08;理想&#xff09; 优先导通&#xff08;理想&#xff09; 恒压降 稳压管&#xff08;二极管plus&#xff09; 基础工作模块 理想稳压管的工作特性 晶体管之三极管(“两个二极管的组合” ) 电弧打火机电路 1.闭合开…

vue 预览 pdf、word、excel

vue 预览 pdf、word、excel 这是之前做项目的时候涉及到的一个功能&#xff0c;当时做了之后就一直没有整理&#xff0c;其实也很简单&#xff0c;功能不多&#xff0c;只是预览&#xff0c;没有在线编辑的功能&#xff0c;所以呢&#xff0c;啊哈哈哈哈哈&#xff0c;一个插件…

用轻量级ORM--Dapper调用MySQL存储过程

阅读本文你的收获 写一个MySQL的分页存储过程学会使用Dapper去调用存储过程 在《用轻量级ORM–Dapper实现泛型仓储》中分享了轻量级ORM框架的基本使用&#xff0c;并实现了一个泛型仓储。本文继续分享用Dapper执行存储过程&#xff0c;区别于上文用的SQL Server数据库&#xf…

【异常】Incorrect string value: ‘\xE5\xAE\xA2\xE4\xBA\xBA...‘ for column

【异常】incorrect string value :\xAA\xE4\xBA for column Incorrect string value: \xE5\xAE\xA2\xE4\xBA\xBA... for column 将配置文件中的连接信息改为如下 spring.datasource.urljdbc:mysql://127.0.0.1:3306/dbname?useUnicodetrue&character_set_serverutf8mb…

3D视觉-结构光测量-多线结构光测量

工作原理 多线结构光测量在测量方式上类似上述线结构光测量&#xff0c;但是两者也有着一些明显的差别。这种形式的结构光测量&#xff0c;也常常被成为面结构光测量。首先激光器发出电光源通过通过光栅的调制产生多个切片光束&#xff0c;这些切片光束照射到待测物体表面后形成…

安全生产知识竞赛活动方案

为进一步普及安全生产法律法规知识&#xff0c;增强安全意识&#xff0c;提高安全技能&#xff0c;经研究&#xff0c;决定举办以“加强安全法治、保障安全生产”为主题的新修订《安全生产法》知识竞赛活动&#xff0c;现将有关事项通知如下&#xff1a; 一、活动时间&#xf…

第22课 类和对象

文章目录 前言一、自定义数据类型——类二、构造函数与析构函数三、类类型的变量——对象1. 对象的定义2. 对象成员的访问3. 定义一个长方形的类Rectangle4. 定义一个圆形的类Circle5. 定义一个数据成员由三角形的3条边构成的三角形类Triangle 课后练习1. 定义一个简单的日期类…