大多数 DSA 题目都是重复的

发布: (2026年2月1日 GMT+8 00:56)
5 min read
原文: Dev.to

Source: Dev.to

The quiet realization

大多数 DSA(数据结构与算法)题目并不是真正全新的。
它们是变体——约束不同、稍作改动、表述换了方式。
但在底层,少数几个思路不断出现:

  • 双指针
  • 滑动窗口
  • 前缀和
  • 二分查找
  • 一点哈希

一旦你注意到这一点,就很难再忽视它。

Why this feels uncomfortable at first

我们很多人被教导要把每个问题当作独一无二的:

  1. 仔细阅读。
  2. 从头开始。
  3. 尝试几种方法。
  4. 希望有什么灵感突然出现。

所以当题目开始重复时,会感觉自己在“作弊”——重复使用思路,好像没有真正学习。这种思维方式让 DSA 看起来比实际更难。

This is how engineering actually works

在真实系统中我们也不会重新发明解决方案。我们会:

  • 识别结构。
  • 重用已知方法。
  • 根据约束调整模式。

DSA 也不例外。面试题并不是在考察你的原创性,而是在考察你是否能够:

  • 识别结构
  • 选择合适的抽象
  • 权衡利弊
  • 解释你的方案为何可行

重复不是系统的弱点——它是信号。

How difficulty really increases

难度通常不是来源于全新的想法,而是把熟悉的思路组合起来。

  • 简单题 → 一个模式
  • 中等题 → 一个或两个模式
  • 困难题 → 通常两个,偶尔三个

仅此而已。由简单到中等的跃迁并不是智商的差别,而是能在脑中同时保持多个约束和不变量。

Why grinding eventually stops helping

如果你不停地解题,却不暂停去提炼模式,你会:

  • 对特定问题过度拟合
  • 很快忘记解法
  • 让下一个变体仍然感觉“新”

相反,停下来问自己:

  • 这实际上在考察哪种模式?
  • 正在维护什么不变量?
  • 哪些约束迫使使用这种方法?

这样,重复就会成为优势而非挫败感。你会更早识别题目——有时在第一分钟内。这时 DSA 就变得可控了。

What helped me the most

对我影响最大的是改变了自问的问题。

  • 以前问:“我能解这道题吗?”
  • 现在问:“这道题想测试哪种模式?”

一旦能回答这个,其他一切自然顺畅:

  • 解法思路
  • 边界情况
  • 时间空间复杂度
  • 解释说明

代码本身往往成为最不有趣的部分。

Why I’m leaning into this publicly

我现在围绕“DSA 主要是结构化的重复”这一观点进行构建——不是为了提供捷径或技巧,而是让学习过程不再显得随机和恐慌。我一直在一个地方(indexedcode.com)记录模式、不变量以及识别它们的方法,主要是作为我希望早些拥有的参考。这篇 newsletter 就是我在做这些时的思考记录。

What’s next

在下一篇文章里,我会写如何在几乎不写代码的情况下提前识别正确的模式。这不是魔法;主要是看约束、关键词以及知道该忽略什么。

如果最近你觉得 DSA 变得重复,那大概是个好兆头——说明你已经开始看到其中的结构。

Back to Blog

相关文章

阅读更多 »