【LeetCode: 347. 前 K 个高频元素 + 桶排序】

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,优快云-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述

在这里插入图片描述

🚩 题目链接

⛲ 题目描述

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

示例 1:

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

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

提示:

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

进阶:你所设计算法的时间复杂度 必须 优于 O(n log n) ,其中 n 是数组大小。

🌟 求解思路&实现代码&运行结果


⚡ 模拟

🥦 求解思路
  1. 统计元素频次:首先创建一个HashMap,遍历给定的整数数组nums,对于数组中的每个元素,检查其是否已存在于HashMap中。若已存在,就将该元素对应的频次值加1;若不存在,则将该元素添加进HashMap,并将其频次初始化为1,以此完成对数组中所有元素出现频次的统计。
  2. 按照频次分组存放元素:创建一个长度为nums.length + 1的ArrayList类型数组list,其目的是可以使用元素的频次作为索引来存放相应元素。接着遍历之前统计频次的HashMap,根据每个元素对应的频次值i,将元素添加到list[i]中。若list[i]还未初始化(即为null),则先创建一个新的ArrayList,再添加元素,从而实现按照频次对元素进行分组存放。
  3. 获取前k个高频元素:从list数组的末尾(即频次最高的位置)开始,按逆序依次遍历每个元素列表所在位置。只要存放结果的List集合res中元素个数还小于k,就对当前位置的元素列表进行检查,若不为空,则将该列表中的所有元素添加到res中,这样不断添加,直至
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值