README · Algorithm

Algorithm

本目录按“题目训练、知识地图、编码速查、源码理解”四条线组织。刷题记录与基础知识分开维护,避免同一个 API 或模板散落在多篇短笔记中。

内容导航

内容用途维护原则
LeetCode Hot100Hot 100 题解与复习独立维护,不与知识笔记合并
动态规划0-1 背包、完全背包等 DP 原理与技巧原理专题,题解代码留在 Hot100
取巧贪心不变量、抵消、原地哈希等一招流口诀原理专题,题解代码留在 Hot100
Java刷题API与算法模板Java 容器 API、排序、二分、前缀和等速查同类短知识统一收口
算法 MindMap题型全景与学习路线只做导航,不堆具体题解
源码JDK 集合与 JUC 源码阅读保留长篇源码上下文

做题时的选择顺序

  1. 先明确输入规模,估算可接受的时间复杂度。
  2. 判断题型:哈希、双指针、滑动窗口、二分、栈、队列、堆、树、图、回溯、贪心或动态规划。
  3. 写清不变量:窗口代表什么、二分区间如何定义、DP 状态表示什么。
  4. 再选择 Java 容器和 API,避免为了熟悉 API 而倒置解题过程。
  5. 用空输入、单元素、重复值、极值、越界和溢出测试实现。

通用复杂度底线

数据规模常见可接受复杂度
$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)$,并关注内存

实际限制还取决于常数、语言、数据分布与平台时限,这张表只用于第一轮排除明显不可行的方案。

延伸阅读