编程题
刷题本身不是目的,真正有价值的是训练抽象建模、边界处理和复杂度意识。如果只是机械记答案,提升通常很有限;但如果把每道题当成“如何拆问题、如何验证方案”的训练,收益会稳定很多。
常见题型
前端开发最常接触、也最值得优先练的题型通常包括:
- 数组与字符串
- 链表
- 栈与队列
- 二叉树
- 哈希表
- 双指针
- 滑动窗口
- 动态规划
这里面不一定每一类都要刷很多,但至少要知道:
- 这类题通常在考什么
- 常见解法的思路是什么
- 复杂度大概会落在哪
刷题真正练的是什么
很多人会把刷题理解成“记模板”,其实更核心的是下面几件事:
- 能不能先说清楚输入、输出和约束
- 能不能从暴力解出发逐步优化
- 能不能发现重复计算
- 能不能主动补边界样例
这套能力,不只在面试里有用,在真实项目里也一样有价值。
一个简单示例
两数之和:
js
function twoSum(nums, target) {
const map = new Map()
for (let i = 0; i < nums.length; i += 1) {
const diff = target - nums[i]
if (map.has(diff)) {
return [map.get(diff), i]
}
map.set(nums[i], i)
}
return []
}这题在训练什么
它不是在考你会不会循环,而是在考你能不能识别:
- 暴力两层循环是
O(n^2) - 可以用哈希表把查找压到
O(1)平均复杂度 - 从而把总复杂度降到
O(n)
刷题建议
先写暴力解,再优化
很多题如果一上来就想最优解,容易卡死。先把正确结果写出来,再思考哪里重复、哪里能缓存,效率更高。
自己造测试样例
不要只跑题目给的样例,还要自己补:
- 空数组
- 单元素
- 重复值
- 极端值
- 非法输入
这会逼你更早发现边界处理问题。
复盘比做新题更重要
一道题做完后,至少要回答:
- 我为什么一开始没想到
- 关键转折点是什么
- 这类思路还能迁移到哪些题
面试与业务的差别
面试刷题偏重抽象能力,但业务里更常见的是“中等复杂度问题反复出现”,例如:
- 数组去重
- 树形数据转换
- 过滤与排序
- 路由匹配
- 权限结构整理
所以不要只追高难题,更值得练的是高频基础题的稳定度。
复盘重点
- 时间复杂度是多少
- 空间复杂度是多少
- 有没有重复遍历
- 边界值是否覆盖
- 解法是否容易向同类题迁移
小结
编程题最值得你带走的,不是“我刷了多少道”,而是:
- 看问题时先抽象输入输出
- 遇到复杂度问题先找重复计算
- 养成边界验证习惯
- 能把题目思路迁移回真实业务
这才是刷题真正能沉淀下来的部分。
