题目:

给定一个非空的整数数组,返回其中出现频率前 高的元素。

示例 1:

输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]

示例 2:

输入: nums = [1], k = 1
输出: [1]

说明:

  • 你可以假设给定的 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。
  • 你的算法的时间复杂度必须优于 O(n log n) , 是数组的大小。

思路:

求频率最高的题目, 第一想法就是要用HashMap,key是每个数字,value是数字出现的次数。
求出每个数字的频率之后,我们想要求出第k高的频率的元素,并且时间复杂度必须优于O(nlog n),那么该如何求呢?
我们应该想到,堆的时间复杂度正好是O(nlog n),可以用堆来求。而堆是可以利用优先队列PriorityQueue来求的
重写compare方法,把频率最高的前k个数字加入queue中, 最后只要把优先队列中的值给弹出,然后再add到list中去就可以了。

java代码:

class Solution {public List<Integer> topKFrequent(int[] nums, int k) {List<Integer> res = new ArrayList<>();if (nums == null || nums.length == 0) {return res;}Map<Integer, Integer> map = new HashMap();for (int i : nums) {if (!map.containsKey(i)) {map.put(i, 1);} else {map.put(i, map.get(i) + 1);}}PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return map.get(o1) - map.get(o2);}});for (Map.Entry<Integer, Integer> entry : map.entrySet()) {if (queue.size() < k) {queue.add(entry.getKey());} else {if (entry.getValue() > map.get(queue.peek())) {queue.remove();queue.add(entry.getKey());}}}while (!queue.isEmpty()) {res.add(queue.remove());}return res;}
}

由于水平有限,博客中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!

推荐阅读:

【leetcode-动态规划】爬楼梯  - CSDN博客

【leetcode-动态规划】买卖股票的最佳时机  - CSDN博客

【leetcode-动态规划】最大子序和

【leetcode-动态规划】 不同路径  - CSDN博客

【leetcode-动态规划】打家劫舍

及时更新最新文章和学习资料,一起来学习:

【leetcode】前 K 个高频元素相关推荐

  1. 前K个高频元素[小根堆和大根堆的使用]

    小根堆 前言 一.前K个高频元素 二.小根堆&大根堆 1.O(KlogN)大根堆 2.O(NlogK)小根堆 总结 参考文献 前言 当题目需要有序性时,果断排序,可二分快速寻找答案,或是利用有 ...

  2. 【LeetCode】【HOT】347. 前 K 个高频元素(哈希表+优先队列)

    [LeetCode][HOT]347. 前 K 个高频元素 文章目录 [LeetCode][HOT]347. 前 K 个高频元素 package hot;import java.util.Arrays ...

  3. Leetcode题347、前K个高频元素(Python题解)Amazon面试题

    问题: 题目来源:力扣(LeetCode) leetcode347.前K个高频元素 难度:中等 分析: 本题解提供四种方法,分别是python的Counter技巧.堆.桶排序.快排. 对于python ...

  4. LeetCode——347. 前 K 个高频元素【最小堆实现】

    LeetCode--347. 前 K 个高频元素[最小堆实现] 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. 示例1: 输入: n ...

  5. 【LeetCode题解】347_前K个高频元素(Top-K-Frequent-Elements)

    更多 LeetCode 题解笔记可以访问我的 github. 文章目录 描述 解法一:排序算法(不满足时间复杂度要求) Java 实现 Python 实现 复杂度分析 解法二:最小堆 思路 Java ...

  6. Leetcode 347. 前 K 个高频元素

    Leetcode 347. 前 K 个高频元素 1.问题分析 2.问题解决 3.总结 1.问题分析 题目链接:https://leetcode-cn.com/problems/top-k-freque ...

  7. 模拟卷Leetcode【普通】347. 前 K 个高频元素

    347. 前 K 个高频元素 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. 示例 1: 输入: nums = [1,1,1,2,2 ...

  8. leetcode:前 K 个高频元素、删除字符串中的所有相邻重复项、有多少小于当前数字的数字、有效的山脉数组、独一无二的出现次数(JavaScript)

    文章目录 347. 前 K 个高频元素 思路 1047. 删除字符串中的所有相邻重复项 思路 1365. 有多少小于当前数字的数字 思路 优化 继续优化 完整代码 941. 有效的山脉数组 思路 12 ...

  9. Java实现 LeetCode 347 前 K 个高频元素

    347. 前 K 个高频元素 给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输 ...

  10. 统计list里面相同元素个数_LeetCode 第 347 号问题:前 K 个高频元素

    本文首发于公众号「五分钟学算法」,是图解 LeetCode 系列文章之一. 个人网站:https://www.cxyxiaowu.com 今天分享的题目来源于 LeetCode 上第 347 号问题: ...

最新文章

  1. .vue文件_在idea中创建vue文件
  2. 2018-04-29
  3. AOSCP4.1.2 红米Note 4X 2017/10/13 非官方 稳定发布
  4. ThreadLocal封装SimpleDateFormat
  5. 巨人的魔法——腾讯打造会思考的数据中心
  6. WordPress通过插件发送邮件
  7. 草稿--Windows消息机制
  8. 《游戏编程入门 4th》笔记(2 / 14):监听Windows消息
  9. 前端性能优化经典:javascript防抖节流
  10. P60 ---AI 在P60 上的人应用
  11. ORACLE EBS CUX用户的创建(转)
  12. 三角计算机器应用试卷,2015-1月信息科技学科期末考试试题
  13. tensorflow2 unet加载自己的图像进行训练
  14. 土木专业应用计算机,计算机在土木中的应用
  15. 关于圆的角度和弧度的计算公式
  16. [渝粤教育] 西南科技大学 汉语写作 在线考试复习资料
  17. Android 产生ANR后的Trace文件的解析
  18. 代数余子式之和怎么算_小明说养老 | 养老金怎么算之算算过渡性养老金
  19. mysql获取去年同期_mysql 查询当天、昨天、本周、上周、本月、上月、今年、去年数据...
  20. 万万没想到:用理工科思维理解世界

热门文章

  1. kubernetes-1.23部署ingress-nginx的controller-1.6.4
  2. 专题2:弹性力学中平面问题的基本理论(2-6 物理方程 2-7 边界条件)
  3. 芙蓉姐姐:藕要用光芒四射的才华刺瞎世俗的狗眼!
  4. vue 里面的动态路由 以及vueAwesomeSwiper的使用 头部标签渐隐渐现的显示
  5. springBoot完美配置log4j2
  6. Python爬虫-Weibo模拟登录及crawling
  7. 【图片新闻】国产新型多用途无人机发射装甲车亮相2019年北京军民融合博览会...
  8. linux下安装Oracle11g提示“无法使用命令/usr/bin/xdpyinfo自动检查显示器颜色”问题的解决
  9. macOS Sierra或者OS X EI Capitan安装PHP扩展出错,Operation not permitted, no-debug-non-zts
  10. Android - 拍照身份证,使用Paint自定义蒙版,拍限定框内照片