当前位置: 首页 > news >正文

LeetCode347.前K个高频元素(hash表+桶排序)

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

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

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

提示:
1<=nums.length<=1051 <= nums.length <= 10^51<=nums.length<=105
k 的取值范围是 [1, 数组中不相同的元素的个数]
题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的

题解:

这道题思路很明显,首先我们要统计每个元素出现的次数,然后就可以进行排序,选出前k个元素,但是重点就是怎么去实现

首先统计的话肯定是用hash表,元素值为key,出现次数为value。那我们统计完之后如何排序以及获得我们需要的。我们统计的时候是按元素统计的,在排序的时候是要按出现次数排,因此要反过来,那就相当于一个key对应的多个value,比方说出现次数2次的有3和5,这两个都是要记录的,这种情况的话桶排序是比较适合的,每个出现次数当作一个桶,一个桶中有多个元素,具体看代码实现。

代码:

class Solution {public int[] topKFrequent(int[] nums, int k) {// 1. 统计出现次数Map<Integer, Integer> map = new HashMap<>();for(int num : nums){if(map.containsKey(num)){map.put(num, map.get(num) + 1);}else map.put(num, 1);}int maxCnt = Collections.max(map.values());// 2. 创建桶数组List<Integer>[] buckets = new ArrayList[maxCnt + 1];for (int i = 0; i <= maxCnt; i++) {buckets[i] = new ArrayList<>();}for(Map.Entry<Integer, Integer> entry : map.entrySet()){buckets[entry.getValue()].add(entry.getKey());}// 3. 倒序遍历,直到ans长度为kint ans[] = new int[k];for(int i = maxCnt, j = 0; i >= 0 && j < k; i --){for(int x : buckets[i]){ans[j ++] = x;}}return ans;}
}
http://www.lryc.cn/news/611446.html

相关文章:

  • Chisel芯片开发入门系列 -- 18. CPU芯片开发和解释8(流水线架构的代码级理解)
  • 思途Mybatis学习 0805
  • LeetCode 刷题【31. 下一个排列】
  • 《Python基础》第3期:使用PyCharm编写Hello World
  • C++ 变量初始化方式总结 | 拷贝初始化 | 列表初始化 | 值初始化
  • 【C语言】动态内存管理详解
  • Kafka 的基本操作(1)
  • 国内办公安全平台新标杆:iOA一体化办公安全解决方案
  • 【基础】第八篇 Java 位运算符详解:从基础到实战应用
  • 【java】大数据insert的几种技术方案和优缺点
  • 一种基于机器学习的关键安全软件WCET分析方法概述与实际工作原理举例
  • 多传感器融合
  • 机器人权利:真实还是虚幻,机器人权利研究如何可能,道德权利与法律权利
  • nodejs 编程基础01-NPM包管理
  • 《计算机“十万个为什么”》之 面向对象 vs 面向过程:编程世界的积木与流水线
  • 【android bluetooth 协议分析 01】【HCI 层介绍 30】【hci_event和le_meta_event如何上报到btu层】
  • 零基础人工智能学习规划之路
  • 电路基础相关知识
  • HBM Basic(VCU128)
  • 翻译的本质:人工翻译vs机器翻译的核心差异与互补性
  • NumPy字符串与数学函数全解析:从基础到实战应用
  • 3. 为什么 0.1 + 0.2 != 0.3
  • ubuntu自动重启BUG排查指南
  • 前端遇到页面卡顿问题,如何排查和解决?
  • C语言:20250805学习(文件预处理)
  • 集成学习与随机森林:从原理到实践指南
  • 高通平台Wi-Fi Display学习-- 调试 Wi-Fi Display 问题
  • 【Git】实现使用SSH方式连接远程仓库时的免密操作
  • 17.8 ChatGLM3/CogVLM一键部署指南:32K长文本+多模态实战,零基础搞定企业级模型微调(附完整代码)
  • 机器学习算法系列专栏:决策树算法(初学者)