为什么这么多人说“Fuck LeetCode”——以及该怎么做?

发布: (2025年12月8日 GMT+8 11:39)
10 min read
原文: Dev.to

Source: Dev.to

Originally published on LeetCopilot Blog

为什么 LeetCode 让聪明人痛苦

很多聪明、有能力的工程师最终会讨厌面试准备。原因并不是智商,而是系统

  1. 度量标准与工作不匹配
    大多数人用题目数量每日连击来衡量进度。面试官关注的是思路清晰度、适应性和边界情况的直觉。当你的度量与真实信号背离时,你可以苦干数周,却仍觉得自己没有前进。

  2. 你在与记忆作战,而不仅仅是难度
    第一次解题是最容易的;两周后在压力下还能记住它的不变量为何该方法有效——这才是难点。没有结构化的笔记和间隔复习,大脑会悄悄把这些记忆抛弃。

  3. 为嘈杂的考试进行沉默练习
    面试是社交行为。你需要实时解释、辩护并纠正。单独刷题并不能训练这些“肌肉”。第一次在计时下叙述时,一切都会显得比实际更难。

  4. 摩擦消耗专注
    复制粘贴题目、切换标签页、切换日志都会占用工作记忆。等到你得到帮助时,已经失去了原本想要保留的思路栈。

  5. “隐藏课程”
    有一套不成文的技巧——如何设定时间盒、何时请求提示、如何设计测试输入来击垮自己的代码、如何叙述取舍。如果没有人教你这些,你会误以为问题出在身上。其实并非如此。

LeetCode 题目真的太难吗?

有时是。但大多数情况下,它们是有针对性的。面试题的大部分集中在一个区间:

  • Easy/Medium:典型模式(滑动窗口、双指针、BFS/DFS、拓扑排序、堆、单调栈、二分查找——在数组以及答案空间上)。
  • Hard:要么是已知模式的异常变体,要么是多种模式的组合(例如,扫线 + 堆,或 DP + 重构)。

感觉“太难”往往掩盖了两个问题:

  • 模式识别延迟——你知道该技术,但识别得太晚。
  • 不变量表述——你能写代码,却说不出必须保持的条件(即让你的窗口/栈/DP 状态保持正确的东西)。

解药不是“再做 300 题”。而是对相同题目进行更好的练习:逐步提示(不剧透)、提前加入边界压力、在大脑雾化时快速可视化、以及你真的会复习的简短笔记。

数据结构与算法在工作中重要吗?

简短回答: 是的,但并不总是面试题所呈现的方式。

  • 数组 / Map / Set / 堆——遥测聚合、限流、排序推荐、优先级调度。
  • ——依赖解析、网络/服务路由、权限、推荐系统。
  • 滑动窗口 / 双指针——流式分析、背压管理、日志窗口。
  • 动态规划——优化、定价、推荐、编译器/分析工具;状态转移的核心思想非常通用。
  • 答案空间二分——调参、自动扩容阈值、SLO 预算搜索。

实用性并不是每周二都要实现“最长子串”。而是你会设计表示、维护不变量,并在约束下权衡取舍。面试是一个不完美的代理,但这些思维模型是可以迁移的。

那么为什么仍然感觉糟糕?

因为过程压倒了意图。如果你的循环奖励连击、惩罚求助,并且不给未来的自己留下任何东西,即使你“相信”DS&A,也会把你磨垮。可持续的循环需要:

  • 教会你在恰当时机请求正确的提示
  • 在代码早期加入边界压力
  • 当文字解释失效时可视化
  • 用简短笔记把今天的练习转化为明天的回忆
  • 每周训练沟通,而不是等到“我准备好了”才练。

让我们一起构建它。

你可以真正坚持的理性学习循环

把它看作一个五步循环。我称之为 FRAME

  1. Find(寻找)——在需要时获取一个策略层面的提示,定位所属家族(模式)。
  2. Represent(表示)——在编码前写出状态与不变量(“什么必须始终为真?”)。
  3. Attempt(尝试)——在友好的时间盒(15–20 分钟)内完成第一次尝试。
  4. Measure(衡量)——尝试击垮自己的代码(边界案例批量运行)。
  5. Encode(编码)——用两分钟的笔记记录洞见(用于第 3/7/30 天复习)。

冲洗,重复。

1) 策略提示(非剧透)

请求一个指向家族的提示:“增长/收缩窗口”、“层级 BFS”、“二分答案空间”。避免代码。如果需要更多,升级一次:概述移动部件,而不是具体更新。最后一步:检查点问题(例如“当重复在 r 处碰撞时,l 会跳到哪里?”)。

2) 表示不变量

写一句必须成立的句子——例如“窗口内字符唯一”、“堆中保存当前 k 个候选”“dp[i] 表示到 i 为止的最佳值…”,并写出可能导致破坏的原因。

3) 在友好计时器下尝试

十五分钟构思/尝试;卡住时获取一次策略提示;再用十分钟适配;在约 45–50 分钟时停止并切换到学习模式。(明天你会比今晚更快完成——今晚你只会继续沮丧。)

4) 通过击垮自己的代码来衡量

生成 3–5 组会让你的解法尴尬的输入(空/角落、重复、倾斜树、极端值)。批量运行它们。修复一个失败并用一行记录原因。

5) 为未来的自己编码

两分钟笔记模板:

  • 用一句话描述题目
  • 用两句话概述思路
  • 用一句话写出不变量
  • 一个失败模式 + 对应修复

加上标签(#array #window#graph #bfs#dp #1d)。安排第 3/7/30 天复习。每次复习前,先冷启动尝试该题 10 分钟;只有在此之后才查看答案。

AI 能否在不破坏学习的前提下帮助算法?

可以——前提是你对它加以约束。AI 能提升杠杆;若不加约束,它会消除构建技能所需的挣扎。把它当作脚手架而非捷径:

  • 只提供渐进式提示——策略 → 结构 → 检查点;不提供代码
  • 行动,而非仅仅对话——让它生成棘手输入并批量运行,更快暴露 bug。
  • 为递归和指针密集的流程可视化执行;图形比文字更能在记忆受限时帮助。
  • 即时捕获洞见——工具应让你在编辑器中直接保存微笔记。
  • 模拟面试练习表现:后续提问、轻度评分(清晰度/思路/正确性)。

以这种方式使用,AI 能降低摩擦、放大练习次数,同时保留关键(有价值)的思考。

LeetCopilot 的定位(轻量、由你决定)

你完全可以用纸笔实现 FRAME。如果你希望循环在 Leet内部运行…(原文后续继续深入探讨 LeetCopilot 的集成)。

Back to Blog

相关文章

阅读更多 »