LeetCode--347.前k个高频元素(使用优先队列解决)

news/2024/12/28 12:50:27/

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

思路:先使用HashMap统计数组各个元素的个数,其中key代表数组元素,value代表元素出现的次数。然后使用队列进行map排序,排序是从大到小,选取前k个元素即为前k个高频元素

何为优先队列?

函数定义如下:

java">public class PriorityQueue<E> extends AbstractQueue<E>implements java.io.Serializable {

JDK解释如下:

基于优先级堆的无限优先级队列。优先级队列的元素根据其自然 Sequences 进行排序,或者根据队列构造时提供的 进行排序Comparator(自定义排序规则),具体取决于使用的构造函数。优先级队列不允许null元素。依赖于自然排序的优先级队列也不允许插入不可比较的对象(这样做可能会导致 )。ClassCastException

代码及其解释:

java">public int[] topKFrequent(int[] nums, int k) {// map中的key为数组元素,value为该元素出现的次数HashMap<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);}}// 优先队列,(o1, o2) -> map.get(o2) - map.get(o1) 升序排列PriorityQueue<Integer> queue = new PriorityQueue<>((o1, o2) -> map.get(o2) - map.get(o1));// 遍历map,将元素放入优先队列中,会自动排序for (int i : map.keySet()) {queue.add(i);}int[] result = new int[k];for (int i = 0; i < k; i++) {result[i] = queue.poll();}return result;
}

http://www.ppmy.cn/news/1558791.html

相关文章

互联互通新篇 | 华东数交陕西丝路数据交易签署合作协议

12月21日&#xff0c;在“第五届数字经济科技大会暨《数据要素资产化白皮书》发布仪式”上&#xff0c;华东江苏大数据交易中心总经理汤寒林与陕西丝路数据交易有限公司执行总经理史奎&#xff0c;郑重签署平台互联互通合作协议。 自2024年5月24日《数据交易机构互认互通倡议》…

普通部署redis伪集群模式

1.准备 一台机子部署六个节点的redis伪集群&#xff0c;机子ip为192.168.58.112 六个节点8001&#xff0c;8002&#xff0c;8003&#xff0c;8004&#xff0c;8005&#xff0c;8006&#xff0c; 创建主目录redis&#xff0c;子目录6个 mkdir redis cd redis mkdir 8001 8…

神经网络-SENet

SENet是一种用于图像分类的卷积神经网络模型&#xff0c;由Jie Hu等人在2018年提出。SENet的全称是“Squeeze-and-Excitation Network”&#xff0c;其核心思想是通过自适应地调整每个通道的特征图权重&#xff0c;来增强卷积神经网络对于不同特征的感知能力。 SENet的设计灵感…

Springboot高并发乐观锁

Spring Boot分布式锁的主要缺点包括但不限于以下几点&#xff1a; 性能开销&#xff1a;使用分布式锁通常涉及到网络通信&#xff0c;这会引入额外的延迟和性能开销。例如&#xff0c;当使用Redis或Zookeeper实现分布式锁时&#xff0c;每次获取或释放锁都需要与这些服务进行交…

国标GB28181-2022平台EasyGBS:安防监控中P2P的穿透方法

在安防监控领域&#xff0c;P2P技术因其去中心化的特性而受到关注&#xff0c;尤其是在远程视频监控和数据传输方面。P2P技术允许设备之间直接通信&#xff0c;无需通过中央服务器&#xff0c;这在提高效率和降低成本方面具有明显优势。然而&#xff0c;P2P技术在实际应用中也面…

vue3使用video-player实现视频播放(可拖动视频窗口、调整大小)

1.安装video-player npm install video.js videojs-player/vue --save在main.js中配置全局引入 // 导入视频播放组件 import VueVideoPlayer from videojs-player/vue import video.js/dist/video-js.cssconst app createApp(App) // 视频播放组件 app.use(VueVideoPlayer)2…

自动驾驶控制算法-横向误差微分方程LQR前馈控制

本文是学习自动驾驶控制算法第六讲 前馈控制与航向误差以及前两节的学习笔记。 1 横向误差微分方程 以规划的轨迹作为自然坐标系&#xff0c;计算自车在轨迹上的投影点&#xff0c;进而计算误差&#xff1a; 如图所示&#xff0c;横向误差为 d d d&#xff0c;航向误差为 θ…

Fast adaptively balanced min-cut clustering

#0.论文信息 标题&#xff1a;Fast adaptively balanced min-cut clustering期刊&#xff1a;Pattern Recognition作者: Feiping Nie , Fangyuan Xie , Jingyu Wang ,Xuelong Li机构: China Telecom, Northwestern Polytechnic al University.代码链接&#xff1a; #1.摘要 …