Solving hundreds of problems is not enough if you cannot recall an approach when a new problem appears. The goal is not just to finish Blind 75 or NeetCode 150—it is to understand patterns, remember approaches, and derive solutions independently.
Learn, practise, revise, and retain
Understand the problem before coding
Spend 5–10 minutes understanding what the problem asks before writing code. Careful problem framing helps you choose a sound approach instead of rushing into an implementation.
- Identify the input, output, and constraints.
- Work through a small example manually.
- Consider edge cases.
- Think of a brute-force approach first.
- Analyze its time and space complexity.
- Look for a more efficient approach.
Keep in mind: Do not jump straight to the solution or watch an explanation immediately.
Follow the 30-minute problem-solving rule
Give a new problem an honest independent attempt. If you get stuck, use hints to move forward without giving up the reasoning process.
- Try solving it independently for 20–30 minutes.
- If stuck, ask for a hint rather than the complete solution.
- If necessary, study the explanation and understand why it works.
- Close the solution and implement it from memory.
- Revisit the problem later without looking at your notes.
Keep in mind: The objective is to learn how to derive the solution, not merely reproduce code.
Maintain smart DSA notes
You do not need lengthy notes for every question. Keep a concise record of important patterns and mistakes in a format you will consistently revisit.
- Problem name and link
- Pattern, such as Sliding Window, Two Pointers, or Binary Search
- Key observation: what makes the solution work?
- Approach: the main steps in plain language
- Time and space complexity
- Mistake made: what did you overlook?
- Recall trigger: what clue in a future problem should remind you of this pattern?
Keep in mind: Use Notion, Google Sheets, a notebook, or a simple Markdown file—whichever you can maintain.
Follow a revision cycle
Revisiting problems helps move patterns into long-term recall. Treat these intervals as a starting point, not a strict rule: if recall is easy, increase the gap; if you struggle, review sooner.
| When | What to do |
|---|---|
| Day 0 | Solve the problem and understand the pattern. |
| Day 1 | Recall the approach without opening the solution. |
| Day 3 | Solve it again with minimal help. |
| Day 7 | Implement it independently. |
| Day 14 | Explain the approach and complexity aloud. |
| Day 30 | Attempt it again under interview conditions. |
Track the problems you struggle with
A simple tracker makes it easier to decide what to revisit and see whether you can solve a problem without help.
| Field | Purpose |
|---|---|
| Problem | Identify the question. |
| Topic | Group related patterns. |
| Status | Track New, Learning, or Mastered. |
| Difficulty | Record Easy, Medium, or Hard. |
| Last revised | Track when you last revisited it. |
| Next revision | Plan your next attempt. |
| Mistake | Remember what went wrong. |
| Independent solve | Record Yes or No. |
Do not mark a problem as mastered just because you understood its explanation. Mark it mastered when you can solve it independently and explain why the approach works.
Practise beyond DSA sheets
Use structured sheets to build coverage, then gradually try unfamiliar problems and mixed-topic practice where the pattern is not given in advance.
- Explore Blind 75
Blind 75
Build a foundation in important interview patterns.
- Explore NeetCode 150
NeetCode 150
Expand pattern coverage and practise common variations.
- Browse LeetCode problems
LeetCode
Apply concepts to unfamiliar problems and variations.
Timed and mixed-topic practice
Build speed and decision-making under pressure, and practise identifying the right pattern without knowing the topic in advance.
Mock interviews
Practise explaining your reasoning while coding, as you would in an interview.
A practical 90-minute session
Adjust the timing to the problem and the time you have available. The purpose is to make room for independent problem-solving, review, and reflection.
- 10 minutesRevise previously attempted problems.
- 35 minutesSolve one new problem independently.
- 15 minutesStudy hints or an explanation if necessary.
- 20 minutesReimplement the solution and understand its complexity.
- 10 minutesUpdate your notes and revision tracker.
Test whether you actually remember
Before considering a problem learned, check whether you can:
- Can I explain the approach without looking at the solution?
- Can I identify the pattern from the problem statement?
- Can I implement it from scratch?
- Can I explain why it works?
- Can I analyze its time and space complexity?
- Can I recognize when this approach would not work?
If you cannot answer these questions, add the problem to your revision list.
The real goal
Do not measure progress only by the number of questions solved. Measure it by how many problems you can solve independently, how well you recognize patterns, how effectively you debug mistakes, and how clearly you explain your reasoning.
Move from “I have seen this problem before” to “I understand the pattern, and I can derive the solution myself.”