~20 minutes · Days 6, 13, 20, 28 · revision protocol
On Days 6, 13, 20, and 28, the goal is not to collect another solution. The goal is to prove that a pattern can come back from memory under interview pressure: blank file, no hints, clear reasoning, and a hard rule for what counts.
Re-solve your weakest problems from a blank file with no hints; a problem only counts as revised when it compiles and passes on the first or second run.
That rule keeps revision honest. Reading notes can feel productive, but it does not test whether the pattern is retrievable. A blank file does.
The tempting version of revision is to reread notes, rewatch a solution, and nod along. It is low-friction, but the signal is weak: recognition is not the same as recall. Interviews ask for recall.
The better version is stricter. Pick the weak item, say the invariant first, write the brute force and its complexity, then code the best approach without opening a stored solution. Only the first two runs count.
The revision loop is strict on purpose: only a blank-file pass in run one or two leaves the weak list.
Read this like a checklist, not a LeetCode submission:
def revision_day(weak_list):
for problem in weak_list[:3]: # use the current topic block
open_blank_file(problem) # no stored code, no hints
predict_invariant(problem) # pattern, brute force, complexity
runs = code_and_submit(problem) # stop after run one or two
if runs <= 2 and tests_pass():
mark_revision_done(problem) # this one counts
else:
log_root_cause(problem) # keep it in the queue
The mistake log matters. Every failed revision gets one clear line: WA: <root cause>, such as wrong invariant, off-by-one, missed edge case, or misread problem. That line chooses the next revision target more reliably than mood does.
Day 20 is a stack revision day. Suppose the weak list points at a monotonic stack problem. Before reading on, predict the first two things to say before coding.
First, state the invariant: keep the stack sorted; whatever gets popped just found its answer. Second, state why it is O(n): each index is pushed once and popped once. Only then open the blank file and code.
| Approach | Time | Space |
|---|---|---|
| Passive review of notes | O(n) pages | O(1) |
| Blank-file weak-list revision | O(k) attempts | O(1) |
The second approach is harder, but it gives a usable signal: pass, fail, or specific mistake. That is what lets the queue improve.
1. When does a revision count?
2. Which file should you start from?
3. Spot the bug in this protocol:
while not tests_pass():
edit_and_run_again()
mark_revision_done(problem)
4. Which Day 20 gate matches stack revision?
Run this checklist on Days 6, 13, 20, and 28. Log every item in your Notion tracker with predict → attempt → compare → encode:
WA: <root cause>, leave Revision Done unticked, and keep it in the queue.The gates are concrete: arrays means one easy hashing and one prefix-sum solve in under 15 minutes each; sliding window means stating every validity rule from memory; stack means explaining amortized push/pop; linked list means reversing on paper with no pointer mistake.
After the blank-file attempts, use the NeetCode roadmap only to confirm topic names and problem families. Do not use it before the two-run test.