您的位置:首页 > 汽车 > 时评 > 湖南智能网站建设公司_最新经济新闻头条新闻_今日新闻最新头条10条摘抄_国内最新新闻事件

湖南智能网站建设公司_最新经济新闻头条新闻_今日新闻最新头条10条摘抄_国内最新新闻事件

2025/1/6 20:25:30 来源:https://blog.csdn.net/m0_51275144/article/details/144774795  浏览:    关键词:湖南智能网站建设公司_最新经济新闻头条新闻_今日新闻最新头条10条摘抄_国内最新新闻事件
湖南智能网站建设公司_最新经济新闻头条新闻_今日新闻最新头条10条摘抄_国内最新新闻事件

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

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

何为优先队列?

函数定义如下:

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

JDK解释如下:

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

代码及其解释:

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;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com