1. 刷题方法论与周期总结
最近刚完成一轮为期两周的集中刷题训练(3月9日-3月14日),想和大家分享下我的刷题节奏安排和实战心得。作为程序员,定期刷题不仅能保持算法敏感度,更是面试准备的必修课。这次我主要聚焦LeetCode中等难度题目,每天保持3-5题的训练量,重点突破动态规划和图论相关题型。
重要提示:刷题不是追求数量,建议每道题至少思考30分钟再查看答案,重点理解解题思路而非背诵代码
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 刷题计划制定与执行
2.1 目标设定与题目筛选
我通常会根据近期需求制定刷题主题。这次主要针对:
- 动态规划(背包问题、股票问题)
- 图论(DFS/BFS应用)
- 字符串处理(正则表达式应用)
使用LeetCode的标签筛选功能,按以下标准选题:
- 通过率60%-80%的中等难度题
- 企业高频面试题(参考LeetCode公司标签)
- 之前提交过但未AC的题目
2.2 每日时间安排建议
我的典型刷题日安排:
code复制9:00-10:00 复习昨日错题
10:00-12:00 新题练习(2道)
14:00-16:00 继续攻克难题
16:00-17:00 整理解题模板
20:00-21:00 随机复习旧题
实测发现分散练习效果优于集中突击,建议每天分2-3个时段进行
3. 核心题型解题技巧
3.1 动态规划破题思路
以经典的322.零钱兑换为例,我的解题步骤:
- 确定dp数组含义(dp[i]表示金额i的最小硬币数)
- 初始化(dp[0]=0,其他初始为最大值)
- 递推公式(dp[i] = min(dp[i], dp[i-coin]+1))
- 遍历顺序(先遍历物品再遍历背包)
常见误区:
- 混淆遍历顺序导致结果错误
- 初始化值设置不当影响结果
- 没有考虑无解情况(amount<0)
3.2 图论问题实战要点
在200.岛屿数量这类题目中,需要注意:
- 使用visited数组标记已访问节点
- DFS实现时注意递归终止条件
- BFS实现时队列的初始化方式
优化技巧:
- 原地修改矩阵代替visited数组
- 方向数组的四种写法对比:
python复制# 方式1
directions = [(0,1),(1,0),(0,-1),(-1,0)]
# 方式2
dx = [0,0,1,-1]
dy = [1,-1,0,0]
4. 刷题工具与效率提升
4.1 我的工具链配置
- IDE配置:
- VS Code + LeetCode插件
- 自定义代码片段(快速生成测试用例)
- 本地调试模板(包含常用import)
- 辅助工具:
- Draw.io画图分析复杂问题
- Notion记录错题本
- Pomodoro计时器控制专注时间
4.2 错题管理方法
我采用的错题分类标准:
markdown复制| 分类 | 处理方式 | 复习周期 |
|------|---------|----------|
| 思路错误 | 重写解题思路 | 3天后 |
| 边界错误 | 补充测试用例 | 1天后 |
| 语法错误 | 整理语法速查 | 立即 |
| 优化不足 | 对比多种解法 | 1周后 |
5. 常见问题与解决方案
5.1 刷题卡壳时的应对策略
当遇到完全没思路的题目时,我的处理流程:
- 先看题目提示(不超过3个)
- 画图分析示例(至少3个测试用例)
- 暴力解法起步(不考虑复杂度)
- 查看讨论区高票回答(理解思路而非代码)
5.2 时间复杂度的快速估算技巧
分享我的速判方法:
- 看到for循环套for循环 → O(n²)
- 每次规模减半 → O(logn)
- 递归调用树深度 × 每层操作 → O(分支数^深度)
例如二分查找:
- 每次范围缩小一半 → O(logn)
- 空间复杂度通常是O(1)或O(n)
6. 周期复盘与效果评估
6.1 本次刷题数据统计
两周共完成42题,分类统计:
- 动态规划:18题(42.8%)
- 图论:12题(28.6%)
- 字符串:7题(16.7%)
- 其他:5题(11.9%)
正确率变化:
code复制第一周:62% → 第二周:78%
6.2 个人提升明显的领域
通过这轮训练,我在以下方面有明显进步:
- 动态规划的状态转移方程设计
- 图问题的邻接表表示法应用
- 字符串匹配的KMP算法理解
- 空间复杂度的优化意识
7. 后续改进方向
根据本次刷题暴露的不足,下阶段重点:
- 加强并查集等高级数据结构的应用
- 提升数学类题目的解题速度
- 完善代码规范(变量命名、注释)
- 建立更系统的解题模板库
建议每周留出固定时间进行专项突破,比如:
- 周一:动态规划
- 周三:图论
- 周五:字符串/数学
- 周末:综合复习
