HOT100-28-前K个高频元素
题目描述
给你一个整数数组 nums
和一个整数 k
,请你返回其中出现频率前 k
高的元素。你可以按 任意顺序 返回答案。
示例 1:
1 | 输入: nums = [1,1,1,2,2,3], k = 2 |
具体见题目详解。
算法思路
这道题很容易想到的是先使用hash_map
存储每个元素的出现频次,但是接下来怎么处理就比较麻烦,因为题目要求时间复杂度不高于 $O(N \times LogN)$ ,如果用了传统的排序,那么最低就需要$NLogN$的复杂度。因此需要考虑别的方法,比如桶排序和堆排序,这里我没有采用堆排序一是因为其复杂度其实是$O(N \times LogN)$,其二是因为自己不太会堆排序hhh,桶排序就比较简单了,我们先通过hash表存储每个元素的出现频次,再将key和map倒过来,何谓倒过来?可以这么理解,我们之前的数据结构hash_map[num] = i
表示num
出现了i
次,如果倒过来存储,就变成了counts[i]=num
,表示出现了i
次的数字包括num
,当然,后面需要使用vector
进行存储。然后对于新容器键值从高向低遍历,直到统计满k
个元素即可,代码如下:
1 | class Solution { |
时间复杂度为$O(N)$,空间复杂度也是线性$O(N)$
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.