【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 个高频元素的集合是唯一的。
  • 你可以按任意顺序返回答案。

解题方法

  1. 先用 map 把 nums[i] 和对应出现的次数存起来
  2. 然后就区最大 k 值的问题了,用一个最小堆,来取最大的 k 个值
  3. 这里用了 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)相关推荐

  1. 347. Top K Frequent Elements 前 K 个高频元素

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

  2. 【LeetCode 剑指offer刷题】查找与排序题12:Top K Frequent Elements

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) Top K Frequent Elements Given a non-empty array of integer ...

  3. 0206.BFPRT在一大堆数中求其前k大或前k小的问题,简称TOP-K问题(左神算法基础班源码)

    package basic_class_02;/*** * 在一大堆数中求其前k大或前k小的问题,简称TOP-K问题.* 而目前解决TOP-K问题最有效的算法即是BFPRT算法**/ public c ...

  4. leetcode 347. Top K Frequent Elements | 347. 前 K 个高频元素(大根堆)

    题目 https://leetcode.com/problems/top-k-frequent-elements/ 题解 参考:leetcode 215. Kth Largest Element in ...

  5. [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, ...

  6. Leetcode - 347. Top K Frequent Elements(堆排序)

    Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nums = [ ...

  7. [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, ...

  8. 力扣347:前k个高频元素---leetcode347:Top K Frequent Elements

    leetcode347题目链接:https://leetcode.cn/problems/top-k-frequent-elements 目录 一.题目描述 二.思路 1.什么是优先级队列呢? 2.什 ...

  9. 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 ...

  10. 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 ...

最新文章

  1. Association Rules 关联规则
  2. 利用FastJSON 把list和map转换成Json
  3. 【学术相关】如何将半页纸论文写到十页?
  4. 钉钉提示请勿通过开发者调试模式_钉钉开放平台demo调试异常问题解决:hostname in certificate didn't match...
  5. 本地无法启动MySQL服务,报的错误:1067,进程意外终止---解决
  6. linux下挂载windows上的共享目录,并设置所有者为非root用户
  7. WireMock.NET如何帮助进行.NET Core应用程序的集成测试
  8. 生成chm文档工具- Sandcastle -摘自网络
  9. 异常笔记:运行hdfs copyFromLocal 上传文件报错
  10. 无法打开登录所请求的数据库 xxxx。登录失败。 用户 'NT AUTHORITY\SYSTEM' 登录失败。...
  11. xp系统怎么定时锁定计算机,电脑怎么设置自动锁屏_XP系统电脑怎么设置自动锁屏...
  12. win10系统用cadance画封装软件卡死问题
  13. C语言之while循环
  14. 禅道删除我的地盘中的任务,提示:您无权访问该迭代
  15. 10个最好的免费PS图象处理软件方案
  16. Java实现第十届蓝桥杯最大降雨量
  17. 需求调研计划_三个公式,让你的2021年度培训计划更出彩
  18. 网红经济到底能走多远?
  19. 固定资产折旧计算的方法
  20. 很多智能手表都用6739芯片_天诺智能手表伴童年,AI智能在身边

热门文章

  1. python3爬虫(5):财务报表爬取入库
  2. MATLAB 中有哪些命令,让人相见恨晚?
  3. android 路由器,无线路由器上跑Android怎么样?
  4. 挑战华为社招:java工程师都要掌握哪些技术
  5. 使用 Typora 画图
  6. 创新Sound Blaster Tactic3D Alpha耳机驱动v1.0官方版
  7. 程序员怎样才能写出一篇好的博客或者技术文章
  8. 虚拟主机共享IP地址
  9. ibmr系列服务器怎么装架子,R440/R540/R640/R740 R820 R930 DELL服务器导轨 滑轨 支架 理线架...
  10. 微信公众平台简易设计使用