为什么这么多人说“Fuck LeetCode”——以及该怎么做?
Source: Dev.to
Originally published on LeetCopilot Blog
为什么 LeetCode 让聪明人痛苦
很多聪明、有能力的工程师最终会讨厌面试准备。原因并不是智商,而是系统。
-
度量标准与工作不匹配
大多数人用题目数量或每日连击来衡量进度。面试官关注的是思路清晰度、适应性和边界情况的直觉。当你的度量与真实信号背离时,你可以苦干数周,却仍觉得自己没有前进。 -
你在与记忆作战,而不仅仅是难度
第一次解题是最容易的;两周后在压力下还能记住它的不变量和为何该方法有效——这才是难点。没有结构化的笔记和间隔复习,大脑会悄悄把这些记忆抛弃。 -
为嘈杂的考试进行沉默练习
面试是社交行为。你需要实时解释、辩护并纠正。单独刷题并不能训练这些“肌肉”。第一次在计时下叙述时,一切都会显得比实际更难。 -
摩擦消耗专注
复制粘贴题目、切换标签页、切换日志都会占用工作记忆。等到你得到帮助时,已经失去了原本想要保留的思路栈。 -
“隐藏课程”
有一套不成文的技巧——如何设定时间盒、何时请求提示、如何设计测试输入来击垮自己的代码、如何叙述取舍。如果没有人教你这些,你会误以为问题出在你身上。其实并非如此。
LeetCode 题目真的太难吗?
有时是。但大多数情况下,它们是有针对性的。面试题的大部分集中在一个区间:
- Easy/Medium:典型模式(滑动窗口、双指针、BFS/DFS、拓扑排序、堆、单调栈、二分查找——在数组以及在答案空间上)。
- Hard:要么是已知模式的异常变体,要么是多种模式的组合(例如,扫线 + 堆,或 DP + 重构)。
感觉“太难”往往掩盖了两个问题:
- 模式识别延迟——你知道该技术,但识别得太晚。
- 不变量表述——你能写代码,却说不出必须保持的条件(即让你的窗口/栈/DP 状态保持正确的东西)。
解药不是“再做 300 题”。而是对相同题目进行更好的练习:逐步提示(不剧透)、提前加入边界压力、在大脑雾化时快速可视化、以及你真的会复习的简短笔记。
数据结构与算法在工作中重要吗?
简短回答: 是的,但并不总是面试题所呈现的方式。
- 数组 / Map / Set / 堆——遥测聚合、限流、排序推荐、优先级调度。
- 图——依赖解析、网络/服务路由、权限、推荐系统。
- 滑动窗口 / 双指针——流式分析、背压管理、日志窗口。
- 动态规划——优化、定价、推荐、编译器/分析工具;状态与转移的核心思想非常通用。
- 答案空间二分——调参、自动扩容阈值、SLO 预算搜索。
实用性并不是每周二都要实现“最长子串”。而是你会设计表示、维护不变量,并在约束下权衡取舍。面试是一个不完美的代理,但这些思维模型是可以迁移的。
那么为什么仍然感觉糟糕?
因为过程压倒了意图。如果你的循环奖励连击、惩罚求助,并且不给未来的自己留下任何东西,即使你“相信”DS&A,也会把你磨垮。可持续的循环需要:
- 教会你在恰当时机请求正确的提示。
- 在代码早期加入边界压力。
- 当文字解释失效时可视化。
- 用简短笔记把今天的练习转化为明天的回忆。
- 每周训练沟通,而不是等到“我准备好了”才练。
让我们一起构建它。
你可以真正坚持的理性学习循环
把它看作一个五步循环。我称之为 FRAME:
- Find(寻找)——在需要时获取一个策略层面的提示,定位所属家族(模式)。
- Represent(表示)——在编码前写出状态与不变量(“什么必须始终为真?”)。
- Attempt(尝试)——在友好的时间盒(15–20 分钟)内完成第一次尝试。
- Measure(衡量)——尝试击垮自己的代码(边界案例批量运行)。
- 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 的集成)。