Skip to content

编程题

刷题本身不是目的,真正有价值的是训练抽象建模、边界处理和复杂度意识。如果只是机械记答案,提升通常很有限;但如果把每道题当成“如何拆问题、如何验证方案”的训练,收益会稳定很多。

常见题型

前端开发最常接触、也最值得优先练的题型通常包括:

  • 数组与字符串
  • 链表
  • 栈与队列
  • 二叉树
  • 哈希表
  • 双指针
  • 滑动窗口
  • 动态规划

这里面不一定每一类都要刷很多,但至少要知道:

  • 这类题通常在考什么
  • 常见解法的思路是什么
  • 复杂度大概会落在哪

刷题真正练的是什么

很多人会把刷题理解成“记模板”,其实更核心的是下面几件事:

  • 能不能先说清楚输入、输出和约束
  • 能不能从暴力解出发逐步优化
  • 能不能发现重复计算
  • 能不能主动补边界样例

这套能力,不只在面试里有用,在真实项目里也一样有价值。

一个简单示例

两数之和:

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)

刷题建议

先写暴力解,再优化

很多题如果一上来就想最优解,容易卡死。先把正确结果写出来,再思考哪里重复、哪里能缓存,效率更高。

自己造测试样例

不要只跑题目给的样例,还要自己补:

  • 空数组
  • 单元素
  • 重复值
  • 极端值
  • 非法输入

这会逼你更早发现边界处理问题。

复盘比做新题更重要

一道题做完后,至少要回答:

  • 我为什么一开始没想到
  • 关键转折点是什么
  • 这类思路还能迁移到哪些题

面试与业务的差别

面试刷题偏重抽象能力,但业务里更常见的是“中等复杂度问题反复出现”,例如:

  • 数组去重
  • 树形数据转换
  • 过滤与排序
  • 路由匹配
  • 权限结构整理

所以不要只追高难题,更值得练的是高频基础题的稳定度。

复盘重点

  • 时间复杂度是多少
  • 空间复杂度是多少
  • 有没有重复遍历
  • 边界值是否覆盖
  • 解法是否容易向同类题迁移

小结

编程题最值得你带走的,不是“我刷了多少道”,而是:

  • 看问题时先抽象输入输出
  • 遇到复杂度问题先找重复计算
  • 养成边界验证习惯
  • 能把题目思路迁移回真实业务

这才是刷题真正能沉淀下来的部分。

转载请注明原文出处,欢迎交流与指正。