LeetCode如何解决前K个高频元素问题
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要介绍了LeetCode如何解决前K个高频元素问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。题目给定一个非空的整数数组,
千家信息网最后更新 2025年02月02日LeetCode如何解决前K个高频元素问题
这篇文章主要介绍了LeetCode如何解决前K个高频元素问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
题目
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]
示例 2:
输入: nums = [1], k = 1输出: [1]
提示:
你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。你可以按任意顺序返回答案。
思路
首先遍历整个数组,并使用哈希表记录每个数字出现的次数,并形成一个「出现次数数组」。找出原数组的前 kk 个高频元素,就相当于找出「出现次数数组」的前 kk 大的值。
最简单的做法是给「出现次数数组」排序。但由于可能有 O(N)O(N) 个不同的出现次数(其中 NN 为原数组长度),故总的算法复杂度会达到 O(N\log N)O(NlogN),不满足题目的要求。
在这里,我们可以利用堆的思想:建立一个小顶堆,然后遍历「出现次数数组」:
如果堆的元素个数小于 kk,就可以直接插入堆中。
如果堆的元素个数等于 kk,则检查堆顶与当前出现次数的大小。如果堆顶更大,说明至少有 kk 个数字的
出现次数比当前值大,故舍弃当前值;否则,就弹出堆顶,并将当前值插入堆中。
遍历完成后,堆中的元素就代表了「出现次数数组」中前 kk 大的值
代码
class Solution { public int[] topKFrequent(int[] nums, int k) { Mapocc = new HashMap (); for (int num : nums) { occ.put(num,occ.getOrDefault(num,0)+1); } PriorityQueue queue = new PriorityQueue (new Comparator () { @Override public int compare(int[] o1, int[] o2) { return o1[1] - o2[1]; } }); for (Map.Entry integerIntegerEntry : occ.entrySet()) { int num = integerIntegerEntry.getKey(); int count = integerIntegerEntry.getValue(); if(queue.size() == k){ if(queue.peek()[1] < count){ queue.poll(); queue.offer(new int[]{num,count}); } }else { queue.offer(new int[]{num,count}); } } int[] ret = new int[k]; for (int i = 0; i < k; i++) { ret[i] = queue.poll()[0]; } return ret; }}
感谢你能够认真阅读完这篇文章,希望小编分享的"LeetCode如何解决前K个高频元素问题"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
数组
元素
次数
篇文章
个数
题目
问题
复杂
复杂度
大小
数字
示例
答案
算法
输入
输出
不同
相同
代码
代表
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
苏州太仓软件开发工程工资多少
京东云网络安全部
广州软件开发解决方案咨询
月入两万的软件开发人员
诛仙世界服务器
数据库中取区间值
软件开发业务员工作安排
湖北软件开发学校
益阳软件开发专业
高校网络安全主题班会简报
qq的数据库下载
重庆大陆软件开发
数据库创建模型简单例子
北京网络技术优势
群体数据库
1 x网络安全防护证书
乌鲁木齐代码审计网络安全培训
CADCAE软件开发
上海仁新网络技术 葛之杨
赢周刊数据库建立的优势
网络技术人员包括
定制企业app软件开发湖州
如何重置ucloud服务器
针对国家网络安全
怎么屏蔽国外服务器
深海娱游网络技术
java服务器教程
高级网络安全工程师日常
网络安全的风险来源
网络安全知识精英赛