关于 DSA 与数学的思考——多年教学的体会

发布: (2026年3月19日 GMT+8 15:00)
5 分钟阅读
原文: Dev.to

Source: Dev.to

Introduction

我最近一直在思考一件事——我还没有完全弄清楚,所以这更像是自言自语,而不是在给出建议。

每当面试临近,我就会翻到 Striver 的表格,从头再来一遍。我会重新做已经做过的题目。做题时我会想“嗯,这我知道”…但过了几周,这些记忆就消失了。不是代码——有时连思路都忘了。于是我又回到原点。

我觉得问题(至少对我来说)在于我学习 DSA 的方式。它非常依赖模式:

  • 这是滑动窗口
  • 这是前缀和
  • 这是双指针

整个过程变成了:

“我能从题目中识别出这个模式吗?”

但只要题目稍微有点变形,我的大脑就会直接说:“不行 👍”。

我们小时候学数学时并不是这样。数学并不抽象,它是苹果、钱、身边的计数。你可以看到它。现在却全是符号、技巧、模式,而在某个阶段我们不再在现实生活中看到它,尽管它可能仍然存在。

A Different Perspective

如果我们不做

“question → pattern”

而尝试

“pattern → where does this exist in real life?”

换句话说,与其在题目中识别模式,不如把它们和现实情境联系起来。

Example 1: Subarray Sum = K

Typical mental shortcut: “prefix sum + hashmap 👍 done”。两周后:“hashmap 是什么?? 😭”。

Real‑world analogy: 你在监控 CPU 使用率,每秒记录一次使用情况。有时会突升到 90%,系统会触发重启。调试时你想找出是哪段连续时间窗口导致了这次突升

你实际上在做:

  1. 累计使用率
  2. 按时间扫描
  3. 找到总和等于 90 的连续区间

一旦找到 → 那就是罪魁祸首 → 那就是触发重启的原因。

这正是 subarray‑sum‑equals‑k 问题,只是感觉不像是“套用一个模式”,而是“我自然会这么做”。

Example 2: Minimum Window Substring

Typical mental shortcut: “sliding window, freq map, shrink when valid”。结果 10 天后忘得一干二净 💀。

Real‑world analogy: 你在做饭。你手头有一长串可用的食材(即 s)。你的目标是找出最小的一段可用食材,使其仍然包含所有需要的东西

于是你:

  1. 不断挑选食材
  2. 检查:“我有没有全部?”
  3. 如果有 → 尝试去掉多余的部分
  4. 持续收缩,直到恰好够用

这正是“扩展 → 满足 → 收缩 → 优化”,但感觉更像常识,而不是某种“技巧”。

What I’m Trying to Get At

也许问题不在于练习不足或记忆力差。也许是:

“我在试图记住从未真正经历过的模式。”

The Shift I Want to Try

与其问:

“这是哪种模式?”

不如问:

“这在现实生活中会出现在什么地方?”

我还不知道这样是否有效,但感觉比不停刷同一张表、每次面试前重新开始,或是假装自己“懂”却在之后记不起来要好得多。

我会用更多题目来尝试这个方法。最坏的情况:什么都不改变。


如果你也尝试过类似的方法并且有效,请在评论里告诉我!

0 浏览
Back to Blog

相关文章

阅读更多 »