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

德惠网站列表网免费发布信息

德惠网站,列表网免费发布信息,软件开发app制作需要多少钱,aspcms在力扣的众多题目中,“前 K 个高频元素” 是一道经典且高频出现的题目,它不仅考察了对哈希表的运用,还涉及到排序、堆等数据结构的知识。今天,我们就来深入解析这道题,看看如何高效地求解。题目分析首先,我…

在力扣的众多题目中,“前 K 个高频元素” 是一道经典且高频出现的题目,它不仅考察了对哈希表的运用,还涉及到排序、堆等数据结构的知识。今天,我们就来深入解析这道题,看看如何高效地求解。

题目分析

首先,我们来明确一下题目要求。给定一个整数数组 nums 和一个整数 k,要求返回其中出现频率前 k 高的元素。需要注意的是,你可以按任意顺序返回答案。

比如,输入 nums = [1,1,1,2,2,3],k = 2,那么输出应该是 [1,2],因为 1 出现了 3 次,2 出现了 2 次,是出现频率前 2 高的元素。

这道题的核心在于如何快速统计元素的频率,并找出频率最高的前 k 个元素。

解法一:哈希表 + 排序

思路核心:

  • 用HashMap统计每个元素的出现频率(键 = 元素,值 = 出现的次数);
  • 将HashMap的键值对(Entry)转为列表,按频率降序排序
  • 取排序后列表的前k个元素,组成结果数组。
import java.util.*;public class TopKFrequent {public int[] topKFrequent1(int[] nums, int k) {// 1. 统计元素频率:key=元素,value=出现次数Map<Integer, Integer> map = new HashMap<>();for (int num : nums) {// 若key不存在,默认值为0,加1后存入;若存在,直接加1map.put(num, map.getOrDefault(num, 0) + 1);}// 2. 将HashMap的键值对转为List,便于排序List<Map.Entry<Integer, Integer>> entryList = new ArrayList<>(map.entrySet());// 3. 按频率降序排序(Java 8 Lambda简化比较器)Collections.sort(entryList, (entry1, entry2) -> {// 频率高的排在前面(entry2.getValue() - entry1.getValue() 表示降序)return entry2.getValue() - entry1.getValue();});// 4. 取前k个元素,存入结果数组int[] result = new int[k];for (int i = 0; i < k; i++) {result[i] = entryList.get(i).getKey();}return result;}

解法二:哈希表 + 堆排序

思路核心​:

  • 仍用HashMap统计频率;​
  • 用PriorityQueue(Java 内置堆结构,默认小顶堆)维护大小为 k 的堆:​
  • 堆中存储 “频率 - 元素” 对,优先按频率升序排列(小顶堆特性:堆顶是当前 k 个元素中频率最小的);​
  • 当堆大小 <k 时,直接加入元素;当堆大小 = k 时,若当前元素频率> 堆顶频率,弹出堆顶并加入当前元素;​
  • 最后从堆中提取所有元素,即为前 k 个高频元素。
import java.util.*;public class TopKFrequent {public int[] topKFrequent2(int[] nums, int k) {// 1. 统计元素频率(同解法一)Map<Integer, Integer> map = new HashMap<>();for (int num : nums) {map.put(num, map.getOrDefault(num, 0) + 1);}// 2. 初始化小顶堆:按频率升序排序,堆顶为频率最小的元素PriorityQueue<int[]> minHeap = new PriorityQueue<>((a, b) -> a[0] - b[0]);// 3. 遍历频率表,维护堆大小为kfor (Map.Entry<Integer, Integer> entry : map.entrySet()) {int num = entry.getKey();int count = entry.getValue();if (minHeap.size() < k) {// 堆未满,直接加入(存入“频率-元素”数组)minHeap.offer(new int[]{count, num});} else {// 堆已满,比较当前频率与堆顶频率if (count > minHeap.peek()[0]) {// 弹出堆顶(频率最小的),加入当前元素minHeap.poll();minHeap.offer(new int[]{count, num});}}}// 4. 从堆中提取结果(堆中元素顺序不影响,题目允许任意顺序)int[] result = new int[k];for (int i = 0; i < k; i++) {result[i] = minHeap.poll()[1]; // 取出数组第1位(元素)}return result;}

http://www.dtcms.com/a/513715.html

相关文章:

  • 哪个网站可以做验证码兼职安徽飞亚建设网站
  • 个人网站icp什么网站可以发布广告
  • 奉化区城乡建设局网站网站设置301解除移动屏蔽
  • 网站 粘度惠阳做网站公司
  • 做动态图片的网站协会网站建站
  • 邯郸兄弟建站徐州建设工程交易网张周
  • 网站树状栏目有点临海钢结构设计网站
  • 做lt行业的人让我登网站外贸网站建站要多少钱
  • 南通企业网站制作网站推广工作计划
  • 中英双语网站模板做兼职网站设计
  • 贵阳网站制作 建设建筑工程网络计划的关键工作有哪些
  • 企业网站设计经典案例商城建设开发
  • 智慧团建网页电脑版登录网站长春火车站咨询电话号码是多少
  • 有哪些新手做外链的网站阿里企业邮箱网页版
  • 网业制作与网站建设建设工程网上质检备案网站
  • 河北seo网站设计凭祥网站建设
  • 高端设计参考网站wordpress标题字体改大
  • 云南网站设计联系方式环球资源网网站特色
  • 网站变灰色代码临海高端营销型网站建设地址
  • 景区旅游网站平台建设wordpress注册弹出502
  • 梓潼县住房和城乡建设局网站聊城高端网站设计建设
  • 做网站用什么格式的图片做网站的一般要多少钱
  • 电子商务网站设计与...个人做网站要注意什么条件
  • 制作图网站有哪些内容金坛建设银行总行网站
  • 外贸网站平台是不是很难做网站的主题有哪些
  • 德保县建设局的网站如何搭建网站后台
  • 哪个网站做视频赚钱西安网站建设行业动态
  • 吉浦网站建设网站版块下载
  • 医疗医院网站建设关于旅游的网站建设目的
  • 网站建设属于前端还是后台女生学什么专业好