1. 为什么选择2026年1月17日刷力扣?
2026年1月17日是个普通的周日,但对于程序员来说,这可能是个绝佳的刷题时机。春节假期刚结束不久,大多数人还处于工作状态调整期,这时候静下心来刷几道力扣题目,既能找回coding感觉,又能为新一年的技术提升开个好头。
我选择这个时间点刷题有几个考虑:
- 避开节假日后的"开工焦虑期"
- 利用周末完整时间段进行沉浸式练习
- 为新一年的面试季提前做准备(金三银四就在不远处)
- 检验自己过去一年的算法能力提升情况
2. 刷题前的环境准备
2.1 开发环境配置
工欲善其事,必先利其器。我的刷题环境配置如下:
bash复制# 常用工具安装
brew install leetcode-cli # Mac用户推荐
pip install leetcode-python-editor # Python开发者必备
推荐使用VS Code + LeetCode插件组合,支持:
- 题目一键下载
- 本地测试用例运行
- 提交历史记录查看
- 多种语言模板支持
2.2 刷题计划制定
根据我的经验,有效的刷题计划应该包含:
- 每日题量:3-5题(新题+复习)
- 时间分配:
- 新题:60分钟/题
- 复习:20分钟/题
- 题目类型分布:
- 数组/字符串:30%
- 树/图:25%
- 动态规划:20%
- 其他:25%
提示:不要一开始就挑战hard难度,建议按照easy→medium→hard的梯度循序渐进。
3. 当日的刷题实战记录
3.1 第一题:两数之和(复习)
虽然是经典easy题,但我发现几个值得注意的点:
- 使用哈希表可以将时间复杂度从O(n²)降到O(n)
- 边界条件要考虑nums为空或只有一个元素的情况
- 注意题目要求返回的是索引而不是数值本身
我的Python实现:
python复制def twoSum(nums, target):
hashmap = {}
for i, num in enumerate(nums):
complement = target - num
if complement in hashmap:
return [hashmap[complement], i]
hashmap[num] = i
return []
3.2 第二题:二叉树的中序遍历(迭代法)
这道题让我重新思考了递归和迭代的转换。递归解法虽然简洁,但面试时常被要求写出迭代版本。
python复制def inorderTraversal(root):
res = []
stack = []
curr = root
while curr or stack:
while curr:
stack.append(curr)
curr = curr.left
curr = stack.pop()
res.append(curr.val)
curr = curr.right
return res
关键点:
- 使用栈模拟递归调用
- 注意指针移动和栈操作的顺序
- 时间复杂度O(n),空间复杂度O(n)
3.3 第三题:最长回文子串(动态规划)
这道medium题花了我近90分钟,主要卡在状态转移方程的设计上。
最终采用的DP解法:
python复制def longestPalindrome(s):
n = len(s)
dp = [[False]*n for _ in range(n)]
res = ""
for i in range(n-1, -1, -1):
for j in range(i, n):
dp[i][j] = s[i] == s[j] and (j-i < 3 or dp[i+1][j-1])
if dp[i][j] and j-i+1 > len(res):
res = s[i:j+1]
return res
踩坑记录:
- 初始时错误地正向遍历,导致依赖的子问题还未计算
- 忘记处理单个字符必定是回文的情况
- 边界条件i==j时应该返回True
4. 刷题后的复盘与优化
4.1 时间管理分析
当日刷题时间分布:
- 两数之和:25分钟(含写测试用例)
- 二叉树遍历:45分钟(迭代法不熟练)
- 最长回文子串:85分钟(DP思路不清晰)
发现问题:
- 对动态规划类题目缺乏系统训练
- 迭代法写树遍历不够熟练
- 测试用例覆盖率不足
4.2 解题技巧总结
通过当日刷题,我总结了几个实用技巧:
-
哈希表预处理:
- 适用于需要快速查找的场景
- 可以牺牲空间换取时间效率
-
栈的应用场景:
- 树的前中后序遍历
- 括号匹配问题
- 单调栈解决Next Greater Element类问题
-
DP问题解题步骤:
- 定义状态
- 建立状态转移方程
- 确定初始条件
- 考虑优化空间
4.3 后续改进计划
基于当日表现,我制定了以下改进方案:
-
专题突破:
- 每周专注一个算法类型(如本周专注DP)
- 完成该类型easy→medium→hard的梯度练习
-
错题本建立:
- 记录每道错题的犯错原因
- 标注最优解法的核心思想
- 定期重做错题(建议间隔1天/3天/7天)
-
模拟面试:
- 每周进行一次限时刷题(45分钟/题)
- 使用白板或纯文本编辑器练习
- 录音回放检查表达是否清晰
5. 长期刷题的建议
5.1 建立知识体系
不要零散刷题,建议按照这个知识框架系统学习:
-
基础数据结构:
- 数组/字符串
- 链表
- 栈/队列
- 哈希表
- 堆/优先队列
- 树/图
-
基础算法:
- 排序/搜索
- 双指针
- 滑动窗口
- 分治
- 回溯
- 贪心
- 动态规划
5.2 刷题质量优先
我见过太多人盲目追求刷题数量,但效果不佳。建议:
- 每道题至少尝试30分钟再看答案
- 理解最优解后要能独立复现
- 记录不同解法的时空复杂度
- 思考题目可能的变种
5.3 保持持续学习
刷题是个长期过程,我的经验是:
- 固定时间:每天留出1-2小时专门刷题
- 参加周赛:力扣每周都有竞赛,可以检验水平
- 交流讨论:加入刷题群组,学习他人思路
- 定期复习:按照艾宾浩斯遗忘曲线安排复习
当日刷题的最大收获不是AC了几道题,而是发现了自己在动态规划方面的薄弱环节。这让我明确了接下来一个月的重点突破方向。刷题路上没有捷径,但正确的方法能让你的努力事半功倍。
