md_files/自学/草稿.md

53 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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