1. 刷题笔记的价值与定位
作为一名经历过校招季的程序员,我深知刷题笔记对技术求职者的重要性。这份标注日期为2026年1月21日的刷题笔记,很可能是某位开发者(ID:hetao1733837)在准备技术面试过程中的个人积累。这类笔记通常包含算法题的解题思路、代码实现、复杂度分析以及个人心得,是程序员提升算法能力的宝贵资源。
好的刷题笔记应该具备几个特征:首先是系统性,按照算法类型或难度分级组织;其次是可追溯性,记录解题过程中的思考路径;最后是实用性,包含优化技巧和常见陷阱。从ID和日期来看,这份笔记可能属于某个技术社区用户的持续更新内容,也可能是个人GitHub仓库的一部分。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 高效刷题方法论
2.1 题目分类与标签体系
建立科学的分类体系是刷题的第一步。我习惯将题目分为以下几类:
- 数据结构:数组/字符串、链表、栈/队列、哈希表、堆、树、图
- 算法:排序、二分查找、DFS/BFS、动态规划、贪心、回溯、分治
- 特殊题型:设计题、数学题、位运算、滑动窗口
建议为每道题打上多重标签,比如"LeetCode 215"可以标记为【堆】【排序】【TopK问题】。这样后期复习时可以通过交叉标签快速定位相关题目。
2.2 解题四步法实战
我总结的解题流程包含四个关键步骤:
-
明确问题边界
- 仔细阅读题目描述至少两遍
- 用自己语言复述问题要求
- 确认输入输出示例和边界条件
示例:遇到"数组中的第K个最大元素"时,要明确K的范围是否可能大于数组长度
-
暴力解法先行
- 先给出最直观的解法(哪怕时间复杂度很高)
- 分析时间/空间复杂度
- 记录这种解法的缺陷
经验:暴力解法能帮助理解问题本质,也是面试时展示思考过程的重要环节
-
优化思路探索
- 画图辅助分析(特别是树/图相关问题)
- 尝试经典算法套用(如看到"最短路径"考虑Dijkstra)
- 寻找重复计算或冗余操作
技巧:用不同颜色标注算法优化前后的变化部分
-
代码实现与测试
- 先写伪代码厘清逻辑
- 注意变量命名和代码风格
- 编写测试用例覆盖常规和边界情况
建议:测试用例要包括空输入、极值、重复元素等特殊情况
3. 经典题型深度解析
3.1 动态规划专题
动态规划(DP)是面试中的高频难点。以经典的"最长递增子序列"为例:
python复制def lengthOfLIS(nums):
dp = [1] * len(nums)
for i in range(1, len(nums)):
for j in range(i):
if nums[i] > nums[j]:
dp[i] = max(dp[i], dp[j]+1)
return max(dp) if dp else 0
优化点:
- 时间复杂度从O(n²)优化到O(nlogn)使用二分查找+贪心
- 空间优化时注意不能简单压缩DP数组
- 需要同时掌握自顶向下和自底向上两种写法
常见误区:
- 混淆子序列和子数组的定义
- 初始化时漏掉边界条件
- 错误理解状态转移方程的含义
3.2 二叉树遍历变种
二叉树相关题目往往考察对遍历方式的灵活运用。以下是非递归后序遍历的实现:
python复制def postorderTraversal(root):
res = []
stack = [(root, False)]
while stack:
node, visited = stack.pop()
if node:
if visited:
res.append(node.val)
else:
stack.append((node, True))
stack.append((node.right, False))
stack.append((node.left, False))
return res
技巧:
- 使用"visited"标记避免重复访问
- 入栈顺序与前/中序不同
- Morris遍历可以做到O(1)空间复杂度
4. 笔记整理与复习策略
4.1 知识图谱构建
我推荐用Notion或Obsidian建立刷题知识图谱,每个题目卡片包含:
- 问题描述(用自己的话重写)
- 多种解法对比
- 时间复杂度分析
- 相关题目链接
- 易错点记录
- 个人解题时长统计
示例结构:
code复制## [题目编号] 题目名称
### 问题重述
### 解法1:暴力法
### 解法2:优化思路
### 复杂度对比
### 相似题目
4.2 间隔复习法
根据艾宾浩斯遗忘曲线,我制定了复习计划:
- 初次解题后立即写总结
- 1天后回顾思路
- 3天后重写代码
- 1周后检查是否还能快速实现
- 随机抽题模拟面试环境
工具推荐:
- LeetCode的收藏夹功能
- Anki记忆卡片
- 自建Excel跟踪表
5. 面试实战技巧
5.1 沟通策略
面试时的表达和解题同样重要:
- 明确问题后先简述思路再写代码
- 变量命名要有意义(避免全是i/j/k)
- 适当添加注释解释复杂逻辑
- 遇到卡壳时坦诚说明当前思考
真实案例:
曾在白板编程时,通过画图解释BFS队列变化过程,最终获得面试官认可。
5.2 代码规范细节
注意这些容易被忽视的细节:
- 函数参数检查(None/空值处理)
- 返回值类型一致性
- 循环边界条件(特别是二分查找)
- 递归终止条件
- 全局变量使用风险
python复制# 好习惯示例
def binary_search(nums, target):
if not nums: # 边界检查
return -1
left, right = 0, len(nums)-1
while left <= right: # 注意等号
mid = left + (right-left)//2 # 避免溢出
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
6. 工具链与资源推荐
6.1 本地开发环境配置
高效的本地调试环境能提升刷题效率:
- VS Code + LeetCode插件
- Jupyter Notebook交互式测试
- pytest单元测试框架
- 自定义代码片段(Snippets)
我的VS Code配置:
json复制{
"leetcode.endpoint": "leetcode-cn",
"leetcode.defaultLanguage": "python",
"leetcode.workspaceFolder": "${workspaceFolder}/leetcode"
}
6.2 优质学习资源
这些资源帮我少走了很多弯路:
- 《算法导论》关键章节精读
- LeetCode官方解题报告
- 技术博客的动画图解
- 牛客网真题讨论区
- MIT OpenCourseWare算法课程
特别注意:
不要盲目追求题量,吃透100道经典题比刷500道更有价值。我花了3个月时间反复研究"股票买卖"系列题的6种变体,最终掌握了DP问题的建模精髓。
