该题解的思路是先用哈希表统计每个元素出现的频率,然后用小顶堆维护前 k 个高频元素。具体步骤如下:
1. 使用哈希表 map_fre 统计数组 nums 中每个元素出现的频率。
2. 创建一个小顶堆 pri_que,遍历哈希表中的键值对,将 (频率, 元素) 二元组插入堆中。
3. 在插入过程中,如果堆的大小超过 k,则弹出堆顶元素,保证堆中始终维护前 k 个高频元素。
4. 遍历完哈希表后,堆中剩下的就是前 k 个高频元素,将它们按照频率从高到低的顺序弹出并存入结果数组中。
5. 返回结果数组。
时间复杂度: O(n log k)
空间复杂度: O(n)
```python
import heapq
from collections import defaultdict
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
# 使用哈希表统计每个元素出现的频率
map_fre = defaultdict(int)
for num in nums:
map_fre[num] += 1
# 创建小顶堆,维护前 k 个高频元素
pri_que = []
for key, freq in map_fre.items():
heapq.heappush(pri_que, (freq, key))
if len(pri_que) > k:
heapq.heappop(pri_que)
# 从堆中弹出前 k 个高频元素,按照频率从高到低的顺序存入结果数组
result = [0] * k
for i in range(k - 1, -1, -1):
result[i] = heapq.heappop(pri_que)[1]
return result
```