1. 为什么我们需要LeetCode刷题笔记?
作为一名在互联网行业摸爬滚打多年的工程师,我见过太多人(包括我自己)在技术面试中因为算法题而折戟沉沙。LeetCode刷题笔记不是简单的题目解答合集,而是系统性的解题思维训练记录。它记录了你在解题过程中的思考路径、犯过的错误以及优化思路,这些才是真正能让你在面试中脱颖而出的关键。
提示:好的刷题笔记应该包含题目分析、初始思路、错误尝试、最终解法、时间空间复杂度分析以及相似题目对比,而不仅仅是AC代码。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 如何建立高效的刷题笔记系统?
2.1 笔记工具选择与结构设计
我尝试过各种笔记工具:纸质笔记本、Evernote、Notion、Obsidian等。最终发现Markdown格式的笔记最适合技术内容,因为它:
- 支持代码高亮
- 方便版本控制(可以放在Git仓库)
- 易于转换为其他格式
- 纯文本形式长期可读
我的笔记目录结构示例:
code复制LeetCode/
├── 数组
│ ├── 双指针
│ │ ├── 167.两数之和II.md
│ │ └── 15.三数之和.md
├── 链表
│ ├── 虚拟头节点
│ │ └── 203.移除链表元素.md
└── README.md # 记录刷题进度和重点题目
2.2 单题笔记的标准模板
每道题的笔记应该包含以下核心部分:
markdown复制# 题目编号与名称
## 题目描述
[粘贴题目原文,包括示例]
## 初始思路
1. 暴力解法思考(即使知道不高效也要写)
2. 可能的优化方向
## 错误尝试
- 记录所有导致WA/TLE的代码版本
- 分析错误原因(边界条件?算法缺陷?)
## 最终解法
### 方法一:XXX
```python
[最终AC代码]
时间复杂度:O(n)
空间复杂度:O(1)
方法二:YYY(如果有更优解)
...
相似题目
- 题目A(区别在于...)
- 题目B(进阶变形)
code复制
## 3. 从新手到高手的刷题进阶路径
### 3.1 按专题突破的黄金顺序
根据我带新人的经验,建议按以下顺序攻克LeetCode专题:
1. **数组与字符串**(30题)
- 双指针(对撞指针、快慢指针)
- 滑动窗口
- 前缀和
2. **链表**(20题)
- 虚拟头节点技巧
- 反转链表系列
- 快慢指针找环
3. **二叉树**(40题)
- 递归三序遍历
- 层序遍历
- 构造二叉树问题
4. **动态规划**(50题)
- 背包问题
- 股票买卖系列
- 打家劫舍系列
> 注意:每个专题建议先做10道Easy熟悉基本套路,再做15-20道Medium掌握变形,最后挑战2-3道Hard。
### 3.2 高频题目精讲示例
以经典的「15. 三数之和」为例,展示完整解题笔记:
```markdown
# 15. 三数之和
## 题目描述
给你一个整数数组nums,返回所有不重复的三元组[nums[i], nums[j], nums[k]]...
## 初始思路
1. 暴力三重循环(O(n^3)明显超时)
2. 可能的优化:先排序+双指针
## 错误尝试
1. 忘记处理重复解:
- 输入[-1,0,1,2,-1,-4]会输出两个[-1,0,1]
- 解决方法:当nums[i]==nums[i-1]时跳过
2. 指针移动条件错误:
- 在sum==0时只移动了左指针
- 应该同时收缩左右指针
## 最终解法
### 方法一:排序+双指针
```python
def threeSum(nums):
nums.sort()
res = []
for i in range(len(nums)-2):
if i>0 and nums[i]==nums[i-1]:
continue
l, r = i+1, len(nums)-1
while l < r:
s = nums[i] + nums[l] + nums[r]
if s < 0:
l += 1
elif s > 0:
r -= 1
else:
res.append([nums[i], nums[l], nums[r]])
while l<r and nums[l]==nums[l+1]: l += 1
while l<r and nums[r]==nums[r-1]: r -= 1
l += 1
r -= 1
return res
时间复杂度:O(n^2)(排序O(nlogn) + 双指针O(n^2))
空间复杂度:O(1)(不考虑结果存储)
相似题目
- 1.两数之和(基础版)
- 16.最接近的三数之和(变形)
- 18.四数之和(进阶)
code复制
## 4. 高效刷题的实战技巧
### 4.1 时间管理与复习策略
我推荐使用「番茄工作法」进行刷题:
- 25分钟专注解题
- 5分钟记录笔记
- 如果25分钟没思路,直接看题解并记录
复习周期建议:
1. 新题:当天→3天后→1周后→1月后
2. 旧题:每月整体复习一次高频题
### 4.2 调试与性能分析技巧
1. **小黄鸭调试法**:
- 对着一只橡皮鸭(或任何物体)逐行解释你的代码
- 这个方法帮我发现了无数逻辑漏洞
2. **极端测试用例设计**:
- 空数组
- 重复元素
- 超大输入(测试边界条件)
3. **时间复杂度验证**:
```python
import time
start = time.time()
# 你的代码
end = time.time()
print(f"耗时:{end-start}秒")
4.3 面试前的冲刺准备
在面试前1-2周,我会:
- 重做所有标注⭐的经典题
- 整理「万能模板」:
- 二分查找框架
- 回溯法模板
- DP状态转移方程套路
- 模拟面试:
- 使用LeetCode的模拟面试功能
- 找朋友进行视频白板演练
我在最后一次跳槽前,用这个方法在2周内刷了100+高频题,最终收获了5个offer。关键不在于刷题数量,而在于每道题是否真正吃透。我的笔记中有一道「接雨水」的题目反复记录了7次不同的解法,这种深度思考才是面试官最看重的。
