【LeetCode】347. Top K Frequent Elements 前 K 个高频元素(Medium)(JAVA)
【LeetCode】347. Top K Frequent Elements 前 K 个高频元素(Medium)(JAVA)
题目地址: https://leetcode.com/problems/top-k-frequent-elements/
题目描述:
Given a non-empty array of integers, return the k most frequent elements.
Example 1:
Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]
Example 2:
Input: nums = [1], k = 1
Output: [1]
Note:
- You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
- Your algorithm’s time complexity must be better than O(n log n), where n is the array’s size.
- It’s guaranteed that the answer is unique, in other words the set of the top k frequent elements is unique.
- You can return the answer in any order.
题目大意
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
提示:
- 你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。
- 你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。
- 题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。
- 你可以按任意顺序返回答案。
解题方法
- 先用 map 把 nums[i] 和对应出现的次数存起来
- 然后就区最大 k 值的问题了,用一个最小堆,来取最大的 k 个值
- 这里用了 java 的 PriorityQueue 优先队列,前 K 个元素直接放进去,K 个之后的元素,如果堆顶元素的个数比当前元素个数小,把堆顶元素取出,把当前元素放进去
class Solution {public int[] topKFrequent(int[] nums, int k) {Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {Integer temp = map.get(nums[i]);if (temp == null) {map.put(nums[i], 1);} else {map.put(nums[i], 1 + temp);}}PriorityQueue<int[]> queue = new PriorityQueue<>(k, (a, b) -> (a[1] - b[1]));int count = 0;for (Map.Entry<Integer, Integer> entry: map.entrySet()) {if (count < k) {queue.offer(new int[]{entry.getKey(), entry.getValue()});count++;} else if (queue.peek()[1] < entry.getValue()) {queue.poll();queue.offer(new int[]{entry.getKey(), entry.getValue()});}}int[] res = new int[k];for (int i = res.length - 1; i >= 0; i--) {res[i] = queue.poll()[0];}return res;}
}
执行耗时:13 ms,击败了94.69% 的Java用户
内存消耗:40.8 MB,击败了97.34% 的Java用户
欢迎关注我的公众号,LeetCode 每日一题更新
【LeetCode】347. Top K Frequent Elements 前 K 个高频元素(Medium)(JAVA)相关推荐
- 347. Top K Frequent Elements 前 K 个高频元素
给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums = [1], ...
- 【LeetCode 剑指offer刷题】查找与排序题12:Top K Frequent Elements
[LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) Top K Frequent Elements Given a non-empty array of integer ...
- 0206.BFPRT在一大堆数中求其前k大或前k小的问题,简称TOP-K问题(左神算法基础班源码)
package basic_class_02;/*** * 在一大堆数中求其前k大或前k小的问题,简称TOP-K问题.* 而目前解决TOP-K问题最有效的算法即是BFPRT算法**/ public c ...
- leetcode 347. Top K Frequent Elements | 347. 前 K 个高频元素(大根堆)
题目 https://leetcode.com/problems/top-k-frequent-elements/ 题解 参考:leetcode 215. Kth Largest Element in ...
- [leetcode]347. Top K Frequent Elements
Given a non-empty array of integers, return the k most frequent elements. For example, Given [1,1,1, ...
- Leetcode - 347. Top K Frequent Elements(堆排序)
Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nums = [ ...
- [swift] LeetCode 347. Top K Frequent Elements
Given a non-empty array of integers, return the k most frequent elements. For example, Given [1,1,1, ...
- 力扣347:前k个高频元素---leetcode347:Top K Frequent Elements
leetcode347题目链接:https://leetcode.cn/problems/top-k-frequent-elements 目录 一.题目描述 二.思路 1.什么是优先级队列呢? 2.什 ...
- Leetcode 347. Top K Frequent Elements--python1行解法,Java 11ms解法
题目地址: Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nu ...
- Leetcode: Top K Frequent Elements
Given a non-empty array of integers, return the k most frequent elements.For example, Given [1,1,1,2 ...
最新文章
- Association Rules 关联规则
- 利用FastJSON 把list和map转换成Json
- 【学术相关】如何将半页纸论文写到十页?
- 钉钉提示请勿通过开发者调试模式_钉钉开放平台demo调试异常问题解决:hostname in certificate didn't match...
- 本地无法启动MySQL服务,报的错误:1067,进程意外终止---解决
- linux下挂载windows上的共享目录,并设置所有者为非root用户
- WireMock.NET如何帮助进行.NET Core应用程序的集成测试
- 生成chm文档工具- Sandcastle -摘自网络
- 异常笔记:运行hdfs copyFromLocal 上传文件报错
- 无法打开登录所请求的数据库 xxxx。登录失败。 用户 'NT AUTHORITY\SYSTEM' 登录失败。...
- xp系统怎么定时锁定计算机,电脑怎么设置自动锁屏_XP系统电脑怎么设置自动锁屏...
- win10系统用cadance画封装软件卡死问题
- C语言之while循环
- 禅道删除我的地盘中的任务,提示:您无权访问该迭代
- 10个最好的免费PS图象处理软件方案
- Java实现第十届蓝桥杯最大降雨量
- 需求调研计划_三个公式,让你的2021年度培训计划更出彩
- 网红经济到底能走多远?
- 固定资产折旧计算的方法
- 很多智能手表都用6739芯片_天诺智能手表伴童年,AI智能在身边
热门文章
- python3爬虫(5):财务报表爬取入库
- MATLAB 中有哪些命令,让人相见恨晚?
- android 路由器,无线路由器上跑Android怎么样?
- 挑战华为社招:java工程师都要掌握哪些技术
- 使用 Typora 画图
- 创新Sound Blaster Tactic3D Alpha耳机驱动v1.0官方版
- 程序员怎样才能写出一篇好的博客或者技术文章
- 虚拟主机共享IP地址
- ibmr系列服务器怎么装架子,R440/R540/R640/R740 R820 R930 DELL服务器导轨 滑轨 支架 理线架...
- 微信公众平台简易设计使用