【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 是数组的大小。
思路:
求频率最高的题目, 第一想法就是要用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 个高频元素相关推荐
- 前K个高频元素[小根堆和大根堆的使用]
小根堆 前言 一.前K个高频元素 二.小根堆&大根堆 1.O(KlogN)大根堆 2.O(NlogK)小根堆 总结 参考文献 前言 当题目需要有序性时,果断排序,可二分快速寻找答案,或是利用有 ...
- 【LeetCode】【HOT】347. 前 K 个高频元素(哈希表+优先队列)
[LeetCode][HOT]347. 前 K 个高频元素 文章目录 [LeetCode][HOT]347. 前 K 个高频元素 package hot;import java.util.Arrays ...
- Leetcode题347、前K个高频元素(Python题解)Amazon面试题
问题: 题目来源:力扣(LeetCode) leetcode347.前K个高频元素 难度:中等 分析: 本题解提供四种方法,分别是python的Counter技巧.堆.桶排序.快排. 对于python ...
- LeetCode——347. 前 K 个高频元素【最小堆实现】
LeetCode--347. 前 K 个高频元素[最小堆实现] 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. 示例1: 输入: n ...
- 【LeetCode题解】347_前K个高频元素(Top-K-Frequent-Elements)
更多 LeetCode 题解笔记可以访问我的 github. 文章目录 描述 解法一:排序算法(不满足时间复杂度要求) Java 实现 Python 实现 复杂度分析 解法二:最小堆 思路 Java ...
- Leetcode 347. 前 K 个高频元素
Leetcode 347. 前 K 个高频元素 1.问题分析 2.问题解决 3.总结 1.问题分析 题目链接:https://leetcode-cn.com/problems/top-k-freque ...
- 模拟卷Leetcode【普通】347. 前 K 个高频元素
347. 前 K 个高频元素 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. 示例 1: 输入: nums = [1,1,1,2,2 ...
- leetcode:前 K 个高频元素、删除字符串中的所有相邻重复项、有多少小于当前数字的数字、有效的山脉数组、独一无二的出现次数(JavaScript)
文章目录 347. 前 K 个高频元素 思路 1047. 删除字符串中的所有相邻重复项 思路 1365. 有多少小于当前数字的数字 思路 优化 继续优化 完整代码 941. 有效的山脉数组 思路 12 ...
- Java实现 LeetCode 347 前 K 个高频元素
347. 前 K 个高频元素 给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输 ...
- 统计list里面相同元素个数_LeetCode 第 347 号问题:前 K 个高频元素
本文首发于公众号「五分钟学算法」,是图解 LeetCode 系列文章之一. 个人网站:https://www.cxyxiaowu.com 今天分享的题目来源于 LeetCode 上第 347 号问题: ...
最新文章
- .vue文件_在idea中创建vue文件
- 2018-04-29
- AOSCP4.1.2 红米Note 4X 2017/10/13 非官方 稳定发布
- ThreadLocal封装SimpleDateFormat
- 巨人的魔法——腾讯打造会思考的数据中心
- WordPress通过插件发送邮件
- 草稿--Windows消息机制
- 《游戏编程入门 4th》笔记(2 / 14):监听Windows消息
- 前端性能优化经典:javascript防抖节流
- P60 ---AI 在P60 上的人应用
- ORACLE EBS CUX用户的创建(转)
- 三角计算机器应用试卷,2015-1月信息科技学科期末考试试题
- tensorflow2 unet加载自己的图像进行训练
- 土木专业应用计算机,计算机在土木中的应用
- 关于圆的角度和弧度的计算公式
- [渝粤教育] 西南科技大学 汉语写作 在线考试复习资料
- Android 产生ANR后的Trace文件的解析
- 代数余子式之和怎么算_小明说养老 | 养老金怎么算之算算过渡性养老金
- mysql获取去年同期_mysql 查询当天、昨天、本周、上周、本月、上月、今年、去年数据...
- 万万没想到:用理工科思维理解世界
热门文章
- kubernetes-1.23部署ingress-nginx的controller-1.6.4
- 专题2:弹性力学中平面问题的基本理论(2-6 物理方程 2-7 边界条件)
- 芙蓉姐姐:藕要用光芒四射的才华刺瞎世俗的狗眼!
- vue 里面的动态路由 以及vueAwesomeSwiper的使用 头部标签渐隐渐现的显示
- springBoot完美配置log4j2
- Python爬虫-Weibo模拟登录及crawling
- 【图片新闻】国产新型多用途无人机发射装甲车亮相2019年北京军民融合博览会...
- linux下安装Oracle11g提示“无法使用命令/usr/bin/xdpyinfo自动检查显示器颜色”问题的解决
- macOS Sierra或者OS X EI Capitan安装PHP扩展出错,Operation not permitted, no-debug-non-zts
- Android - 拍照身份证,使用Paint自定义蒙版,拍限定框内照片