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

Leetcode 前 k 个高频元素

在这里插入图片描述

使用最小堆算法来解决这道题目:相当于有一个容量固定为K的教室,只能容纳 K 个人,学生们逐个逐个进入该教室,当教室容量达到K人之后,每次进入一个新的学生后,我们将分数最低的学生(类似本题中的频率最低元素)赶出去,最后所有学生都遍历结束之后,教室里所余的学生就是成绩前K高的学生们。

在这道题目中,最小堆(PriorityQueue)就像是一个只能容纳 K 个学生的教室,每次加入一个新的学生,教室满了就会将成绩最低的学生(即频率最低的元素)移除出去。最终剩下的 K 个学生,就是成绩最高的 K 个学生。

具体步骤如下:

  1. 我们先统计每个元素的出现频率(类似学生的分数)。
  2. 然后我们使用一个容量为 K 的最小堆来维护当前频率最高的 K 个元素。
    • 当堆的大小超过K时,将频率最低的元素移除,这样堆中始终只会保留频率最高的K个元素。
  3. 最后,堆中剩下的元素就是前K个高频元素。

这个方法的复杂度主要取决于建立和维护堆的过程,大概是O(N log K) 的时间复杂度,其中N是数组的长度,K是要返回的高频元素的个数。

class Solution {public int[] topKFrequent(int[] nums, int k) {//首先利用 Hashmap 统计每个数值的频率Map<Integer, Integer> freqMap = new HashMap<>();for(int num : nums) {freqMap.put(num, freqMap.getOrDefault(num, 0) + 1);}//创建最小堆,存储键值对对象,key 代表元素,value 代表对应的频率值. // 比较器 (a, b) -> a.getValue() - b.getValue() 隐式地比较了两个元素的频率 // 如果 a 的值(频率)小于 b,则 a 会排在 b 前面(因为最小堆会将频率最小的元素放在堆顶)PriorityQueue<Map.Entry<Integer, Integer>> minHeap = new PriorityQueue<>(k, (a, b) -> a.getValue() - b.getValue());    //维护一个大小为 k 的最小堆for(Map.Entry<Integer, Integer> entry : freqMap.entrySet()) {// 遍历插入一个新的键值对,而不是元素;键是唯一的,没有重复//由于堆顶元素始终是最小的元素,所以无论当前offer提供的待插入元素的大小与此时堆顶元素的大小如何,都会被插入堆中并自动调整。minHeap.offer(entry);if(minHeap.size() > k) { minHeap.poll(); }}int[] results = new int[k];for(int i = 0; i < k; ++i) {results[i] = minHeap.poll().getKey();}return results;}
}
http://www.lryc.cn/news/458842.html

相关文章:

  • [LeetCode] 面试题01.02 判定是否互为字符重拍
  • 数据结构-4.5.KMP算法(旧版上)-朴素模式匹配算法的优化
  • STM32 QSPI接口驱动GD/W25Qxx配置简要
  • UCI-HAR数据集深度剖析:训练仿真与可视化解读
  • 牛客SQL练习详解 06:综合练习
  • k8s apiserver高可用方案
  • 服务器数据恢复—硬盘坏扇区导致Linux系统服务器数据丢失的数据恢复案例
  • 【多线程】多线程(12):多线程环境下使用哈希表
  • 轻量服务器和云服务器ecs哪个好用一些?
  • 【交通标志识别系统】Python+卷积神经网络算法+人工智能+深度学习+机器学习+算法模型
  • 特种设备作业叉车司机试题附答案
  • 【Nginx系列】Nginx启动失败
  • 2024/10/12 计组大题专训
  • 2024年腾讯外包面试题(微创公司)
  • nginx运行时报:No rule to make target ‘build‘, needed by ‘deault‘.Stop
  • dvwa:暴力破解、命令注入、csrf全难度详解
  • Java-学生管理系统[初阶]
  • 微信小程序 详情图片预览功能实现详解
  • LeetCode 48 Rotate Image 解题思路和python代码
  • 余承东直播论道智能驾驶:激光雷达不可或缺,华为ADS 3.0引领安全创新
  • 51WORLD携手浙江科技大学,打造智慧校园新标杆
  • SAP SD学习笔记09 - 受注传票中的不完全Log 和 Business Partner(取引先机能)
  • 【ROS2】里程计(odometry)数据计算、发布
  • AcWing 187 导弹防御系统 暴搜
  • SpringSecurity(三)——自定义优化器
  • STM32通用定时器TIM3的PWM输出实验配置步骤
  • device tree 预研
  • 英伟达股价分析:英伟达股价能否上涨到150美元,接下来该如何操作?
  • Rust 快速入门(一)
  • java 程序在服务器出现时区错误问题(使用Date,LocalDateTime,ZonedDateTime都不正确)