1.7 KiB
1.7 KiB
-
当然可以!下面是你可以直接记到笔记里的内容:
🧠 题型:Top K 高频元素(LeetCode 347)
题目描述:给定一个整数数组
nums
和一个整数k
,返回出现频率最高的前k
个元素,返回顺序可以任意。
📌 解法一:大根堆(最大堆)
思路:
- 使用
HashMap
统计每个元素的出现频率。 - 构建一个大根堆(
PriorityQueue
+ 自定义比较器),根据频率降序排列。 - 将所有元素加入堆中,弹出前
k
个元素即为答案。
适合场景:
- 实现简单,适用于对全部元素排序后取前
k
个。 - 时间复杂度:O(n log n),因为需要将所有
n
个元素都加入堆。
📌 解法二:小根堆(最小堆)
思路:
- 使用
HashMap
统计频率。 - 构建一个小根堆,堆中仅保存前
k
个高频元素。 - 遍历每个元素:
- 如果堆未满,直接加入。
- 如果当前元素频率大于堆顶(最小频率),则弹出堆顶,加入当前元素。
- 最终堆中保存的就是前
k
个高频元素。
适合场景:
- 当
k ≪ n
时效率更高。 - 时间复杂度:O(n log k),因为堆中最多维护
k
个元素。
✅ 总结对比:
方法 适合场景 时间复杂度 空间复杂度 大根堆 k ≈ n,简单易写 O(n log n) O(n) 小根堆 k ≪ n,更高效 O(n log k) O(n)
需要我再写成代码模板笔记也可以,随时说!
- 使用