卡住好几个小时?LeetCode 的“Productive Struggle”法则

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

Source: Dev.to

最初发布于 LeetCopilot Blog

盯着屏幕看了 2 小时并不是坚持——那是浪费时间。下面给出一个基于技能的时间上限,帮助你决定何时查看答案。

你已经盯着这道题目看了 90 分钟。你有一些想法,但都没有奏效。你不确定自己是“快要成功了”还是完全跑偏了。

内部辩论

  • 选项 1: “继续尝试。总会想通的。放弃是软弱。”
  • 选项 2: “这在浪费时间。看看答案然后继续前进。”

你在坚持与效率之间陷入僵局。

网上的建议往往毫无帮助:

  • “永不放弃!” → 导致 4 小时的苦苦挣扎
  • “15 分钟后就看答案” → 学不到东西
  • “视情况而定” → 毫无帮助

真相: 确实有一个合适的时间长度,只是它会随你的水平、题目难度和目标而变化。本指南提供一个基于技能的框架,帮助你判断何时坚持、何时放手,消除猜测。

TL;DR

  • 核心问题: 没有通用的时间上限;“高效挣扎”(以学习为中心)需要 30‑90 分钟,具体取决于技能水平,而“低效挣扎”(没有理解的随意尝试)无论时长都在浪费时间。
  • 为何重要: 过快查看答案会阻碍技能提升;过度挣扎(例如 4 小时马拉松)会导致倦怠,并且对大多数学习者来说,90 分钟后收益递减。
  • 框架: 基于技能的时间预算(初学者:45‑60 分钟,中级:30‑45 分钟,高级:60‑90 分钟),并在 15/30/45 分钟节点设置进度检查点,以判断你是取得实质性进展还是原地打转。
  • 常见初学者错误: 使用固定时间限制(例如“一律 30 分钟”),忽视了 Easy 与 Hard 题目以及学习 vs. 面试准备情境需要不同的挣扎时长。
  • 你将学到的内容: 用于区分高效与低效挣扎的诊断问题、情境化的时间上限(学习新模式 vs. 练习已知模式),以及如何通过分级提示系统 用微提示延长高效挣扎而不是直接给出完整答案。

理解高效挣扎 vs. 低效挣扎

高效挣扎

表现形式

  • 产生想法并进行测试
  • 每一次尝试都能提供新信息
  • 理解为什么某些方法会失败
  • 有进展,即使还没有完全解出题目

示例

时间操作
15 分钟尝试暴力解法,发现 O(n²) 太慢
30 分钟尝试哈希表,发现边界情况问题
45 分钟优化思路,接近答案

这种挣扎在提升技能。

低效挣扎

表现形式

  • 重复同一个失败的思路,期待奇迹出现
  • 尝试之间没有新洞见
  • 完全的思维阻塞(毫无想法)
  • 充满挫败感却没有学习收获

示例

  • 15 分钟:卡住
  • 30 分钟:仍卡在同一个点
  • 60 分钟:愤怒且毫无进展

这种挣扎在浪费时间并滋生怨恨。

基于技能的时间预算框架

完全初学者(< 20 道题目已解)

  • 时间预算: 最多 45‑60 分钟
  • 原因: 你还在学习基础概念,而不是追求最优;没有指导的长时间挣扎会养成坏习惯,需要频繁验证。

检查点

时间问题
15 分钟我是否理解了题目在问什么?
30 分钟我是否已经写出任何实现(即使是暴力的)?
45 分钟我是在取得进展还是在原地打转?

45 分钟的决策

  • 有进展 → 再继续到 60 分钟
  • 没有进展 → 查看提示(而不是完整答案)
  • 提示后仍卡住 → 查看答案,深入理解后再从记忆中重写代码

中级编码者(已解 20‑100 道题目)

  • 时间预算: 中等题目 30‑45 分钟,困难题目 60‑90 分钟
  • 原因: 你能更快识别模式并快速实现已知方法;对难点概念的延长挣扎是有价值的。

检查点

时间问题
15 分钟我是否已经识别出模式/思路?
30 分钟我是否已经写出可运行的解法?
45 分钟(中等)我是在优化还是卡住了?

45 分钟的决策

  • 中等题已解 → 直接进入下一题
  • 中等题未解 → 查看一个思路提示,重新尝试约 15 分钟,然后若仍卡住再看完整答案
  • 困难题未解 → 属于可接受范围,90 分钟后再查看答案

高级(已解 100+ 题,基础扎实)

  • 时间预算: 学习时 60‑90 分钟,刷题时 15‑30 分钟
  • 原因: 能进行更深入的思考;对解法的探索能带来更大收益;对模式的巩固则使用更短时间。

检查点

时间问题
30 分钟是否考虑了多种解法?
60 分钟是否找到了最优解或接近最优?
90 分钟是否出现收益递减的现象?

90 分钟的决策

  • 即使接近,也建议查看答案——你的首个思路往往已经足够好。
  • 在找到可运行解法后再研究最优解,比一直磨砺完美更有助于学习。

情境化时间上限

情境 1:学习新模式(如滑动窗口、动态规划)

  • 时间预算: 60‑90 分钟
  • 策略
    1. 前 30 分钟:自行尝试
    2. 查看思路解释(不是代码)
    3. 再用 30 分钟实现
    4. 若仍卡住 → 查看完整答案并深入学习

情境 2:练习已知模式

  • 时间预算: 30‑45 分钟
  • 策略
    1. 前 15 分钟:识别模式
    2. 前 30 分钟:实现代码
    3. 若卡住 → 提示实现细节,而非完整答案

情境 3:面试模拟

  • 时间预算: 中等 15‑25 分钟,困难 30‑40 分钟
  • 策略
    • 严格计时;即使未解也要在时间到时结束
    • 事后复盘答案,记录“面试失败”以校准期望

情境 4:复习 / 间隔重复

  • 时间预算: 10‑20 分钟
  • 策略
    • 若 20 分钟内未解,说明之前的学习不够扎实
    • 查看答案,重新编码,并安排下一次复习

检查点决策树

15 分钟时

提问: “我是否已经弄清楚题目要解决什么?”

  • ✅ 是 → 继续
  • ❌ 否 → 重读题目,查看示例,明确约束条件
  • ❌❌ 仍不清楚 → 查看题目解释(不是答案)

30 分钟时

提问: “我是否已经写出任何可运行的代码?”

  • ✅ 是,暴力解法可跑 → 优化或直接进入下一题
  • ⚠️ 是,但测试不通过 → 再调试约 15 分钟
  • ❌ 没有代码 → 查看思路提示

45 分钟时(初学者 / 中级)

提问: “相较于 30 分钟,我是否更接近解答?”

  • ✅ 是,取得进展 → 再继续到 60 分钟
  • ❌ 否,仍原地 → 查看完整答案
  • ⚠️ 感到沮丧/愤怒 → 休息 10 分钟后再决定

60‑90 分钟时(高级)

提问: “再花 30 分钟能否解决?”

  • ✅ 可能,只差一个 bug → 再坚持到 90 分钟
  • ❌ 没有明确思路 → 查看答案
  • ⚠️ 收益递减 → 即使接近,也建议现在学习最优解,而不是继续硬磨

红旗:何时立即停止

红旗 1:重复相同的失败尝试

如果同一思路已经尝试了 3 次以上且没有新收获,说明陷入循环。

行动: 查看提示或休息一下。

红旗 2:情绪压力

如果感到愤怒、绝望或眼眶发红,学习已经中断。

行动: 立刻离开,明天再以全新状态回来。

Back to Blog

相关文章

阅读更多 »

第3天:反思与推动

概述:前两天的重点是打好基础:观看了 3Blue1Brown 的两个向量视频,并挑战了 LeetCode 题目 217、242、1、347……