README · Algorithm
Algorithm
本目录按“题目训练、知识地图、编码速查、源码理解”四条线组织。刷题记录与基础知识分开维护,避免同一个 API 或模板散落在多篇短笔记中。
内容导航
| 内容 | 用途 | 维护原则 |
|---|---|---|
| LeetCode Hot100 | Hot 100 题解与复习 | 独立维护,不与知识笔记合并 |
| 动态规划 | 0-1 背包、完全背包等 DP 原理与技巧 | 原理专题,题解代码留在 Hot100 |
| 取巧 | 贪心不变量、抵消、原地哈希等一招流口诀 | 原理专题,题解代码留在 Hot100 |
| Java刷题API与算法模板 | Java 容器 API、排序、二分、前缀和等速查 | 同类短知识统一收口 |
| 算法 MindMap | 题型全景与学习路线 | 只做导航,不堆具体题解 |
| 源码 | JDK 集合与 JUC 源码阅读 | 保留长篇源码上下文 |
做题时的选择顺序
- 先明确输入规模,估算可接受的时间复杂度。
- 判断题型:哈希、双指针、滑动窗口、二分、栈、队列、堆、树、图、回溯、贪心或动态规划。
- 写清不变量:窗口代表什么、二分区间如何定义、DP 状态表示什么。
- 再选择 Java 容器和 API,避免为了熟悉 API 而倒置解题过程。
- 用空输入、单元素、重复值、极值、越界和溢出测试实现。
通用复杂度底线
| 数据规模 | 常见可接受复杂度 |
|---|---|
| $n \le 20$ | 指数级、状态压缩、回溯 |
| $n \le 10^3$ | $O(n^2)$ 常可接受 |
| $n \le 10^5$ | 通常需要 $O(n\log n)$ 或 $O(n)$ |
| $n \le 10^6$ | 通常需要接近 $O(n)$,并关注内存 |
实际限制还取决于常数、语言、数据分布与平台时限,这张表只用于第一轮排除明显不可行的方案。