热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Leetcode:NO.347前K个高频元素堆

题目给定一个非空的整数数组,返回其中出现频率前k高的元素。示例1:输入:nums[1,1,1,2,2,3],k2输出:[1,2]示例2:输入:nums[1],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 个高频元素的集合是唯一的。
你可以按任意顺序返回答案。

链接:https://leetcode-cn.com/problems/top-k-frequent-elements

解题记录


  • 通过map进行数组中数值的统计
  • 取出value进行排序获取到第k个value的值
  • 通过比对值得到大于等于value值得key写入数组

/*** @author: ffzs* @Date: 2020/9/7 上午7:08*/
public class Solution {public int[] topKFrequent(int[] nums, int k) {Map<Integer, Integer> numMap &#61; new HashMap<>();for (int num : nums) {numMap.compute(num, (key, value)-> value &#61; value &#61;&#61; null? 1: value &#43;1);}List<Integer> values &#61; new ArrayList<>(numMap.values());values.sort(Comparator.reverseOrder());int[] res &#61; new int[k];System.out.println(values);int aim &#61; values.get(k-1);int i &#61; 0;for (Map.Entry<Integer, Integer> entry : numMap.entrySet()) {if (entry.getValue() >&#61; aim) {System.out.println(entry.getValue());res[i] &#61; entry.getKey();i&#43;&#43;;}}return res;}
}class Test {public static void main(String[] args) {Solution solution &#61; new Solution();int[] nums &#61; {4,1,-1,2,-1,2,3};System.out.println(Arrays.toString(solution.topKFrequent(nums, 2)));}
}

在这里插入图片描述

  • 通过对进行排序&#xff0c;始终维持堆的数量为k&#xff0c;如果新key的value大于当前最小&#xff0c;替换

/*** &#64;author: ffzs* &#64;Date: 2020/9/7 上午8:07*/
public class Solution2 {public int[] topKFrequent(int[] nums, int k) {Map<Integer, Integer> numMap &#61; new HashMap<>();for (int num : nums) {numMap.compute(num, (key, value)-> value &#61; value &#61;&#61; null? 1: value &#43;1);}// 根据值排序PriorityQueue<Integer> heap &#61; new PriorityQueue<>(Comparator.comparingInt(numMap::get));for (Map.Entry<Integer, Integer> entry : numMap.entrySet()) {if (heap.size() < k) heap.add(entry.getKey());else if (numMap.get(heap.peek()) < entry.getValue()) {heap.poll();heap.add(entry.getKey());}}int[] res &#61; new int[k];for (int i &#61; 0; i < k; i&#43;&#43;) {res[i] &#61; heap.poll();}return res;}
}

在这里插入图片描述


推荐阅读
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
author-avatar
每天洗脸的小媳妇_853
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有