用 AI 当教练,把 LeetCode 从“刷题”变成“系统化学习”。
本仓库收录我在 AI(GitHub Copilot / Claude)辅助下整理的 LeetCode 题解笔记。 重点不是“题做出来”,而是沉淀解题模板 + 提升主动回忆能力。
在线阅读:https://liukun2634.github.io/leetcode-ai-java/(左侧目录、全文搜索、代码高亮、上一/下一题分页)
| 传统刷题 | 本项目方式 |
|---|---|
| 看题 → 看答案 → 抄一遍 → 忘 | 看题 → 自己想 → AI 引导分析 → 结构化笔记 → 主动回忆 |
| 只记得"这题用 DP" | 记得"为什么用 DP、用哪种 DP、对应什么模板、同类题有哪些" |
| 题海战术 | 题型 → 模板 → 变形,举一反三 |
核心理念:每一题都尝试回答四个问题
- 题目本质是什么?(能不能翻译成图/状态/区间/单调结构…)
- 暴力为什么不行?(看清优化的方向)
- 关键技巧叫什么名字?(写进自己的"模板库")
- 还有哪些同类题?(编织知识网络)
leetcode-ai-java/
├── README.md ← 你正在看的文件(题目索引自动生成)
├── index.html ← docsify 入口,GitHub Pages 直接渲染
├── _sidebar.md ← docsify 左侧目录(脚本自动生成)
├── .nojekyll ← 告诉 GH Pages 不要用 Jekyll
├── scripts/
│ └── generate-index.ps1 ← 扫描 md 文件,重建 README 索引 + sidebar
│
├── interview-prep/ ← 题解笔记主目录
│ ├── README.md ← 路线图:分类 + 高频题清单
│ ├── 01-array-hash/ ← 每个分类一个文件夹
│ │ └── leetcode-{n}-{name}.md ← 单题笔记,统一模板
│ ├── 02-sliding-window/
│ ├── ...
│ └── 10-heap/
│
└── java-toolkit/ ← 写代码 + 跑代码的 Java 工具箱
├── README.md
├── java-leetcode-io-template/ ← 本地跑 LeetCode 风格输入
├── java-io-template/ ← 通用 ACM/笔试输入
└── java-leetcode-collections/ ← Java 集合 / 常用函数速查(7 篇)
leetcode-{题号}-{英文名}.md
├── 一、题目 # 含约束 + 示例
├── 二、解题思路(学习重点) # ★ 核心
│ ├── 1. 题目分析(翻译成状态/图/区间)
│ ├── 2. 关键观察(为什么这么做)
│ ├── 3. 细节坑表(细节 ↔ 技巧 一一对应)
│ └─ 4. 多解法对比
├── 三、Java 题解 # 推荐解法 + 记忆口诀
├── 四、复杂度 # 含"朴素为什么 TLE"
├── 五、示例验证 # 手工跑表格,加深印象
└── 六、复盘与延伸
├── 一句话总结
├── 自我提问(合上代码默答)★ 主动回忆
└── 同类型题推荐
这个模板的设计借鉴了**主动回忆(Active Recall)+ 间隔重复(Spaced Repetition)**学习法。
以下索引由
scripts/generate-index.ps1扫描interview-prep/**/leetcode-*.md自动生成。 请勿手动编辑两个AUTO-INDEX标记之间的内容。加题后运行:pwsh scripts/generate-index.ps1
| # | 题目 | 难度 | 分类 | 标签 | 笔记 |
|---|---|---|---|---|---|
| 1 | 两数之和 (Two Sum) | Easy | 数组 & 哈希 | 数组、哈希表 | 笔记 |
| 3 | 无重复字符的最长子串 (Longest Substring Without Repeating Characters) | Medium | 双指针 & 滑动窗口 | 哈希表、字符串、滑动窗口 | 笔记 |
| 4 | 寻找两个正序数组的中位数 (Median of Two Sorted Arrays) | Hard | 二分查找 | 数组、二分查找、分治 | 笔记 |
| 11 | 盛最多水的容器 (Container With Most Water) | Medium | 数组 & 哈希 | 数组、双指针、贪心 | 笔记 |
| 15 | 三数之和 (3Sum) | Medium | 数组 & 哈希 | 数组、排序、双指针 | 笔记 |
| 20 | 有效的括号 (Valid Parentheses) | Easy | 栈 & 队列 | 栈、字符串 | 笔记 |
| 21 | 合并两个有序链表 (Merge Two Sorted Lists) | Easy | 链表 | 链表、递归 | 笔记 |
| 22 | 括号生成 (Generate Parentheses) | Medium | 回溯 | 回溯、剪枝 | 笔记 |
| 23 | 合并 K 个升序链表 (Merge K Sorted Lists) | Hard | 链表 | 链表、堆、分治 | 笔记 |
| 25 | K 个一组翻转链表 (Reverse Nodes in K-Group) | Hard | 链表 | 链表、递归 | 笔记 |
| 33 | 搜索旋转排序数组 (Search in Rotated Sorted Array) | Medium | 二分查找 | 数组、二分查找 | 笔记 |
| 39 | 组合总和 (Combination Sum) | Medium | 回溯 | 数组、回溯 | 笔记 |
| 41 | 缺失的第一个正数 (First Missing Positive) | Hard | 数组 & 哈希 | 数组、原地哈希 | 笔记 |
| 42 | 接雨水 (Trapping Rain Water) | Hard | 双指针 & 滑动窗口 | 数组、双指针、单调栈、动态规划 | 笔记 |
| 46 | 全排列 (Permutations) | Medium | 回溯 | 回溯、数组 | 笔记 |
| 49 | 字母异位词分组 (Group Anagrams) | Medium | 数组 & 哈希 | 哈希表、字符串、排序 | 笔记 |
| 51 | N 皇后 (N-Queens) | Hard | 回溯 | 回溯、剪枝 | 笔记 |
| 53 | 最大子数组和 (Maximum Subarray) | Medium | 数组 & 哈希 | 数组、动态规划、贪心、分治 | 笔记 |
| 55 | 跳跃游戏 (Jump Game) | Medium | 动态规划 | 数组、贪心、动态规划 | 笔记 |
| 56 | 合并区间 (Merge Intervals) | Medium | 数组 & 哈希 | 数组、排序、贪心 | 笔记 |
| 70 | 爬楼梯 (Climbing Stairs) | Easy | 动态规划 | 动态规划、数学 | 笔记 |
| 72 | 编辑距离 (Edit Distance) | Medium | 动态规划 | 字符串、动态规划 | 笔记 |
| 76 | 最小覆盖子串 (Minimum Window Substring) | Hard | 双指针 & 滑动窗口 | 哈希表、字符串、滑动窗口 | 笔记 |
| 78 | 子集 (Subsets) | Medium | 回溯 | 回溯、位运算 | 笔记 |
| 84 | 柱状图中最大的矩形 (Largest Rectangle in Histogram) | Hard | 栈 & 队列 | 栈、单调栈、数组 | 笔记 |
| 98 | 验证二叉搜索树 (Validate Binary Search Tree) | Medium | 树 | 树、BST、DFS、递归 | 笔记 |
| 102 | 二叉树的层序遍历 (Binary Tree Level Order Traversal) | Medium | 树 | 树、BFS、队列 | 笔记 |
| 121 | 买卖股票的最佳时机 (Best Time to Buy and Sell Stock) | Easy | 动态规划 | 数组、动态规划、贪心 | 笔记 |
| 122 | 买卖股票的最佳时机 II (Best Time to Buy and Sell Stock II) | Medium | 动态规划 | 数组、贪心、动态规划 | 笔记 |
| 124 | 二叉树中的最大路径和 (Binary Tree Maximum Path Sum) | Hard | 树 | 树、DFS、动态规划 | 笔记 |
| 128 | 最长连续序列 (Longest Consecutive Sequence) | Medium | 数组 & 哈希 | 哈希表、并查集 | 笔记 |
| 142 | 环形链表 II (Linked List Cycle II) | Medium | 链表 | 链表、快慢指针、Floyd 判圈 | 笔记 |
| 146 | LRU 缓存 (LRU Cache) | Medium | 链表 | 设计、哈希表、双向链表 | 笔记 |
| 153 | 寻找旋转排序数组中的最小值 (Find Minimum in Rotated Sorted Array) | Medium | 二分查找 | 数组、二分查找 | 笔记 |
| 155 | 最小栈 (Min Stack) | Medium | 栈 & 队列 | 栈、设计 | 笔记 |
| 198 | 打家劫舍 (House Robber) | Medium | 动态规划 | 动态规划 | 笔记 |
| 199 | 二叉树的右视图 (Binary Tree Right Side View) | Medium | 树 | 树、BFS、DFS | 笔记 |
| 200 | 岛屿数量 (Number of Islands) | Medium | 图与搜索 | DFS、BFS、并查集、网格 | 笔记 |
| 206 | 反转链表 (Reverse Linked List) | Easy | 链表 | 链表、递归、双指针 | 笔记 |
| 207 | 课程表 (Course Schedule) | Medium | 图与搜索 | 图、拓扑排序、BFS、DFS | 笔记 |
| 208 | 实现 Trie (前缀树) | Medium | 堆 & 设计 | 字典树、设计 | 笔记 |
| 209 | 长度最小的子数组 (Minimum Size Subarray Sum) | Medium | 双指针 & 滑动窗口 | 数组、滑动窗口、前缀和 | 笔记 |
| 210 | 课程表 II (Course Schedule II) | Medium | 图与搜索 | 图、拓扑排序、BFS、DFS | 笔记 |
| 215 | 数组中的第 K 个最大元素 (Kth Largest Element in an Array) | Medium | 堆 & 设计 | 堆、快速选择、分治 | 笔记 |
| 236 | 二叉树的最近公共祖先 (Lowest Common Ancestor) | Medium | 树 | 树、DFS、递归 | 笔记 |
| 238 | 除自身以外数组的乘积 (Product of Array Except Self) | Medium | 数组 & 哈希 | 数组、前缀和、前后缀分解 | 笔记 |
| 239 | 滑动窗口最大值 (Sliding Window Maximum) | Hard | 栈 & 队列 | 队列、单调队列、滑动窗口 | 笔记 |
| 295 | 数据流的中位数 (Find Median from Data Stream) | Hard | 堆 & 设计 | 堆、设计、数据流 | 笔记 |
| 297 | 二叉树的序列化与反序列化 (Serialize and Deserialize Binary Tree) | Hard | 树 | 树、设计、BFS、DFS | 笔记 |
| 300 | 最长递增子序列 (Longest Increasing Subsequence) | Medium | 动态规划 | 动态规划、二分查找、贪心 | 笔记 |
| 322 | 零钱兑换 (Coin Change) | Medium | 动态规划 | 动态规划、完全背包 | 笔记 |
| 347 | 前 K 个高频元素 (Top K Frequent Elements) | Medium | 堆 & 设计 | 哈希、堆、桶排序、快速选择 | 笔记 |
| 438 | 找到字符串中所有字母异位词 (Find All Anagrams in a String) | Medium | 双指针 & 滑动窗口 | 哈希表、字符串、滑动窗口 | 笔记 |
| 460 | LFU 缓存 (LFU Cache) | Hard | 堆 & 设计 | 设计、哈希、双向链表 | 笔记 |
| 547 | 省份数量 (Number of Provinces) | Medium | 图与搜索 | 图、DFS、BFS、并查集 | 笔记 |
| 739 | 每日温度 (Daily Temperatures) | Medium | 栈 & 队列 | 栈、单调栈、数组 | 笔记 |
| 875 | 爱吃香蕉的珂珂 (Koko Eating Bananas) | Medium | 二分查找 | 数组、二分查找、答案二分 | 笔记 |
| 994 | 腐烂的橘子 (Rotting Oranges) | Medium | 图与搜索 | 图、BFS、多源 BFS、网格 | 笔记 |
| 1143 | 最长公共子序列 (Longest Common Subsequence) | Medium | 动态规划 | 字符串、动态规划 | 笔记 |
- 1. 两数之和 — Easy · 数组、哈希表
- 11. 盛最多水的容器 — Medium · 数组、双指针、贪心
- 15. 三数之和 — Medium · 数组、排序、双指针
- 41. 缺失的第一个正数 — Hard · 数组、原地哈希
- 49. 字母异位词分组 — Medium · 哈希表、字符串、排序
- 53. 最大子数组和 — Medium · 数组、动态规划、贪心、分治
- 56. 合并区间 — Medium · 数组、排序、贪心
- 128. 最长连续序列 — Medium · 哈希表、并查集
- 238. 除自身以外数组的乘积 — Medium · 数组、前缀和、前后缀分解
- 3. 无重复字符的最长子串 — Medium · 哈希表、字符串、滑动窗口
- 42. 接雨水 — Hard · 数组、双指针、单调栈、动态规划
- 76. 最小覆盖子串 — Hard · 哈希表、字符串、滑动窗口
- 209. 长度最小的子数组 — Medium · 数组、滑动窗口、前缀和
- 438. 找到字符串中所有字母异位词 — Medium · 哈希表、字符串、滑动窗口
- 21. 合并两个有序链表 — Easy · 链表、递归
- 23. 合并 K 个升序链表 — Hard · 链表、堆、分治
- 25. K 个一组翻转链表 — Hard · 链表、递归
- 142. 环形链表 II — Medium · 链表、快慢指针、Floyd 判圈
- 146. LRU 缓存 — Medium · 设计、哈希表、双向链表
- 206. 反转链表 — Easy · 链表、递归、双指针
- 20. 有效的括号 — Easy · 栈、字符串
- 84. 柱状图中最大的矩形 — Hard · 栈、单调栈、数组
- 155. 最小栈 — Medium · 栈、设计
- 239. 滑动窗口最大值 — Hard · 队列、单调队列、滑动窗口
- 739. 每日温度 — Medium · 栈、单调栈、数组
- 4. 寻找两个正序数组的中位数 — Hard · 数组、二分查找、分治
- 33. 搜索旋转排序数组 — Medium · 数组、二分查找
- 153. 寻找旋转排序数组中的最小值 — Medium · 数组、二分查找
- 875. 爱吃香蕉的珂珂 — Medium · 数组、二分查找、答案二分
- 98. 验证二叉搜索树 — Medium · 树、BST、DFS、递归
- 102. 二叉树的层序遍历 — Medium · 树、BFS、队列
- 124. 二叉树中的最大路径和 — Hard · 树、DFS、动态规划
- 199. 二叉树的右视图 — Medium · 树、BFS、DFS
- 236. 二叉树的最近公共祖先 — Medium · 树、DFS、递归
- 297. 二叉树的序列化与反序列化 — Hard · 树、设计、BFS、DFS
- 200. 岛屿数量 — Medium · DFS、BFS、并查集、网格
- 207. 课程表 — Medium · 图、拓扑排序、BFS、DFS
- 210. 课程表 II — Medium · 图、拓扑排序、BFS、DFS
- 547. 省份数量 — Medium · 图、DFS、BFS、并查集
- 994. 腐烂的橘子 — Medium · 图、BFS、多源 BFS、网格
- 22. 括号生成 — Medium · 回溯、剪枝
- 39. 组合总和 — Medium · 数组、回溯
- 46. 全排列 — Medium · 回溯、数组
- 51. N 皇后 — Hard · 回溯、剪枝
- 78. 子集 — Medium · 回溯、位运算
- 55. 跳跃游戏 — Medium · 数组、贪心、动态规划
- 70. 爬楼梯 — Easy · 动态规划、数学
- 72. 编辑距离 — Medium · 字符串、动态规划
- 121. 买卖股票的最佳时机 — Easy · 数组、动态规划、贪心
- 122. 买卖股票的最佳时机 II — Medium · 数组、贪心、动态规划
- 198. 打家劫舍 — Medium · 动态规划
- 300. 最长递增子序列 — Medium · 动态规划、二分查找、贪心
- 322. 零钱兑换 — Medium · 动态规划、完全背包
- 1143. 最长公共子序列 — Medium · 字符串、动态规划
- 208. 实现 Trie — Medium · 字典树、设计
- 215. 数组中的第 K 个最大元素 — Medium · 堆、快速选择、分治
- 295. 数据流的中位数 — Hard · 堆、设计、数据流
- 347. 前 K 个高频元素 — Medium · 哈希、堆、桶排序、快速选择
- 460. LFU 缓存 — Hard · 设计、哈希、双向链表
统计:共 59 题(Easy 6 · Medium 40 · Hard 13)
本仓库使用 docsify 把 markdown 实时渲染成网站,零构建步骤。
- 进入仓库 → Settings → Pages
- Source 选
Deploy from a branch - Branch 选
main,目录选/ (root),保存 - 等 1~2 分钟,访问:https://liukun2634.github.io/leetcode-ai-java/
- 左侧目录:按分类 / 题号自动排序
- 全文搜索:题号、题名、标签、笔记内容
- 代码高亮:Java / Python / Bash / PowerShell
- 数学公式:KaTeX 渲染
$O(n \log n)$ - 上一题 / 下一题分页导航
- 一键复制代码块
- 响应式,手机可读
# 方式 A:用 docsify-cli(推荐)
npm i -g docsify-cli
docsify serve .
# → http://localhost:3000
# 方式 B:随便一个静态服务器
python -m http.server 8000
# → http://localhost:8000# 1. 在对应分类下加一个 leetcode-N-name.md
# 2. 重建索引
pwsh scripts/generate-index.ps1
# 3. 推上去,GitHub Pages 自动更新
git add -A
git commit -m "add: NNN <题名>"
git push- 不要直接问 AI “怎么做”
- 而是问自己:这题像什么我做过的题?数据量提示什么复杂度?
不好的提问:
“帮我写出这题的答案”
好的提问:
“这题我想到了 BFS,但 n=10^5 会不会 TLE?怎么优化?” “这题正向 DP 和反向 DP 哪个更适合?为什么?” “这个细节为什么要
max(0, j-maxJump)?不写会怎样?”
让 AI 按统一模板输出,方便日后翻阅、对比同类题。
笔记里“自我提问”那一节,两天后再回来默答一遍。 答不上来 → 重读 → 再过两天 → 再答。间隔重复是记忆的关键。
笔记最后的“同类型题推荐”就是检验你是否真的掌握模板的考场。
- 文件命名:
leetcode-{题号}-{kebab-case-英文名}.md - 放在对应的
interview-prep/{NN-category}/下 - 笔记开头第一行:
# [LeetCode {N}. {中文名} ({English Name})](https://leetcode.com/...) - 第三行(meta):
> 难度:Easy/Medium/Hard | 标签:xx、yy | ...- 脚本依赖这两行解析元数据,写一致才能自动建索引
- 加完题运行
pwsh scripts/generate-index.ps1同步 README + sidebar - Commit 信息:
add: NNN <题名> — <一句话技巧>
- LeetCode 中国
- 灵茶山艾府的题单 — 按算法分类的精选题单
- 代码随想录
- OI Wiki — 算法百科
仅用于个人学习记录。题目版权归 LeetCode 所有。
"The best way to learn is to teach — to AI, to your future self, to a blank page."