大多数 DSA 题目都是重复的
Source: Dev.to
The quiet realization

大多数 DSA(数据结构与算法)题目并不是真正全新的。
它们是变体——约束不同、稍作改动、表述换了方式。
但在底层,少数几个思路不断出现:
- 双指针
- 滑动窗口
- 前缀和
- 二分查找
- 一点哈希
一旦你注意到这一点,就很难再忽视它。
Why this feels uncomfortable at first
我们很多人被教导要把每个问题当作独一无二的:
- 仔细阅读。
- 从头开始。
- 尝试几种方法。
- 希望有什么灵感突然出现。
所以当题目开始重复时,会感觉自己在“作弊”——重复使用思路,好像没有真正学习。这种思维方式让 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 变得重复,那大概是个好兆头——说明你已经开始看到其中的结构。