剑指Offer II 060. 出现频率最高的 k 个数字
给定一个整数数组nums
和一个整数k
,请返回其中出现频率k
高的元素。可以按任意顺序返回答案。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2 |
示例 2:
输入: nums = [1], k = 1 |
提示:
1 <= nums.length <= 105
k
的取值范围是[1, 数组中不相同的元素的个数]
题目数据保证答案唯一,换句话说,数组中前k
个高频元素的集合是唯一的
进阶:所设计算法的时间复杂度 必须 优于
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/g5c51o 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
使用HashMap先统计数字出现的次数。然后考虑使用大顶堆来统计前
class Solution { |
这里使用的是优先级队列的包含比较器Comparator
的构造函数。Comparable
接口与Comparator
接口的区别在于,Comparable
主要用于实现同类之间的相互比较,而Comparator
则通常用于容器中的元素进行比较。若此处优先级队列的泛型参数类实现了Comparable
接口,那么构造函数中可以不用传入比较器Comparator
。但我们此处存放的是一个int
型的数组,所以需要实现一个Comparator
接口的匿名实现类传入,以实现两个元素之间的比较。
复杂度
- 时间复杂度:主要来自于数组扫描,和建堆的过程,应当是
。 - 空间复杂度:使用了
Map
和堆,复杂度是。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 阿日哥的向量空间!