不背代码,搞懂"为什么这么设计"——每个数据结构都是为了解决一个具体问题
| 算法 | 平均 | 最差 | 空间 | 稳定 | 适合 |
|---|---|---|---|---|---|
| 快排 | O(nlogn) | O(n²) | O(logn) | ❌ | 内存排序(实际最快) |
| 归并 | O(nlogn) | O(nlogn) | O(n) | ✅ | 大数据/外部排序/要稳定 |
| 堆排 | O(nlogn) | O(nlogn) | O(1) | ❌ | 空间受限/Top K |
| 桶排 | O(n) | O(n²) | O(n) | ✅ | 范围已知且均匀 |
| 看到问题 | 本质 | 第一反应 |
|---|---|---|
| 查快还是插快 | 数组查快插慢,链表插快查慢 | 读多用数组,写多用链表 |
| HashMap 为什么 O(1) | 哈希映射到下标 | 冲突挂链表,长了转红黑树防退化 |
| 树为什么这么多 | 都是防退化成链表 | 内存红黑树,磁盘 B+树 |
| 排序用哪个 | 没有最好只有适合 | 快排(内存)/归并(稳定+外排)/堆排(省空间) |
| 算法题怎么想 | 暴力→优化→套套路 | 先暴力再优化,识别特征套模板 |