Let's be honest: you're probably reading this because you solved 50 LeetCode problems, forgot most of them two weeks later, and now you're panicking about upcoming interviews. You're not alone.
This isn't another "grind 500 problems" guide. This is a realistic 90-day roadmap designed for people with jobs, families, and actual lives—showing you exactly what to study, when to review it, and how to make knowledge stick without burning out.
Why Most DSA Prep Plans Fail (And Why This One Won't)
I've watched hundreds of people prepare for coding interviews. Here's what usually happens:
Scenario 1: The Random Grinder
- Opens LeetCode → picks random medium problem
- Gets stuck → watches solution video
- Feels smart for 10 minutes
- Next day: can't remember what they learned
- After 3 months: solved 300 problems, can barely do "Two Sum" from memory
Scenario 2: The Last-Minute Crammer
- Procrastinates for 2 months
- 30 days before interview: panic mode
- Tries to do 10 problems per day
- Burns out in week 2
- Shows up to interview exhausted and unprepared
✅ What Actually Works
Structured learning + Spaced repetition + Realistic time commitment = Long-term retention
- 2-3 hours daily (not 8 hours)
- Topic → Pattern → Application progression
- Review problems before you forget them
- Build on previous knowledge systematically
The Science: Why You Forget Everything (And How to Fix It)
Here's what nobody tells you about learning DSA:
The Forgetting Curve (discovered by psychologist Hermann Ebbinghaus):
- After 1 day: You forget ~50% of what you learned
- After 1 week: You forget ~70%
- After 1 month: You forget ~80-90%
This isn't because you're bad at DSA. This is how human memory works.
🧠 The Solution: Spaced Repetition
Review problems at increasing intervals:
- Day 1: Solve the problem (spend 30-45 mins)
- Day 3: Re-solve without looking (10-15 mins)
- Day 7: Re-solve + explain approach out loud (5-10 mins)
- Day 14: Quick review of key pattern (5 mins)
- Day 30+: Monthly touchpoint for complex patterns
Each successful review strengthens the neural pathway. After 3-4 reviews, the pattern becomes automatic.
90-Day Roadmap Overview
Here's the big picture before we dive into weekly details:
| Phase |
Days |
Focus |
Goal |
| Foundation |
1-30 |
Arrays, Strings, Lists, Hash Maps |
Never freeze on basic questions |
| Patterns |
31-60 |
Sliding Window, Trees, Heaps, Binary Search |
Recognize patterns instantly |
| Advanced |
61-90 |
Graphs, DP, Backtracking, Mocks |
Handle any interview confidently |
Time commitment: 2-3 hours daily = 180-270 hours total
Expected problems solved: 300-400 (250 medium, 100 easy, 50 hard)
Review sessions: ~150-200 (this is where mastery happens)
Phase 1: Foundation (Days 1-30)
Mindset: "I'm building muscle memory for the basics. Speed doesn't matter yet—correctness does."
Week 1 Arrays & Two Pointers
Why start here: Arrays appear in 60%+ of interviews. Master them first.
Core concepts to understand:
- Array traversal (forward, backward, both)
- Two pointers (same direction vs opposite directions)
- In-place modifications (when you can't use extra space)
- Subarray vs subsequence (contiguous vs not)
Problems to solve (do in this order):
- Two Sum (brute force → hash map optimization)
- Remove Duplicates from Sorted Array (two pointers)
- Move Zeroes (in-place swapping)
- Best Time to Buy and Sell Stock (one-pass tracking)
- Container With Most Water (two pointers, greedy)
- 3Sum (sorting + two pointers + duplicate handling)
Key skills you're building:
- Recognizing when two pointers help
- Converting O(n²) brute force to O(n) with hashing
- Handling edge cases (empty array, single element, all duplicates)
Daily practice pattern:
- Mon-Wed: 2 new problems/day (easy → medium)
- Thu-Fri: 1 new + review 2 older ones
- Sat: Harder problem + write pattern notes
- Sun: Review all week's problems without looking at code
Week 2 Strings & Sliding Window
The pattern: "Maintain a window of elements and slide it across the array/string while tracking some property."
When to use sliding window:
- Problem asks about contiguous subarrays/substrings
- Keywords: "longest," "shortest," "maximum," "minimum" + some condition
- You're tempted to write nested loops → try window instead
Must-solve problems:
- Longest Substring Without Repeating Characters
- Minimum Window Substring
- Permutation in String
- Find All Anagrams in String
- Longest Repeating Character Replacement
Practice tip: For each problem, first write the brute force nested loop version, calculate its complexity, then optimize with window.
Week 3 Linked Lists & Stacks/Queues
Why this matters: Tests your pointer manipulation skills. If you can't reverse a linked list, you're not ready for interviews.
Before solving problems:
- Implement a singly linked list from scratch (no libraries)
- Implement a stack using array AND using linked list
- Practice drawing linked list operations on paper
Essential problems:
- Reverse Linked List (iterative + recursive)
- Linked List Cycle (Floyd's algorithm)
- Merge Two Sorted Lists
- Remove Nth Node From End
- Reorder List
- Valid Parentheses (stack)
- Daily Temperatures (monotonic stack)
Pro tip: Always draw the linked list state before and after each operation. Helps catch null pointer bugs.
Week 4 Hash Maps & Hash Sets
The superpower: Turn O(n²) problems into O(n) with O(n) space.
Pattern recognition:
- "Have I seen this element before?" → Hash set
- "How many times does X appear?" → Hash map with counts
- "Find pair/triplet that sums to Y" → Hash map to store complements
- "Group elements by property Z" → Hash map of lists
Problems that cement the pattern:
- Two Sum (review with hash map approach)
- Group Anagrams
- Longest Consecutive Sequence
- Subarray Sum Equals K
- Top K Frequent Elements
- First Unique Character in String
End of Week 4 Checkpoint
By now you should be able to:
- Solve most easy problems in <15 minutes
- Recognize two pointers, sliding window, hashing patterns
- Explain your approach before coding
- Handle basic edge cases without prompting
Self-test: Pick 5 random easy/medium problems from weeks 1-4 and solve them with a timer. Aim for 70%+ success rate.
Phase 2: Core Patterns (Days 31-60)
Mindset shift: "I'm not learning new topics—I'm recognizing patterns in disguise."
Week 5 Binary Search Mastery
Beyond sorted arrays: Binary search is a thinking pattern, not just an algorithm.
Three types of binary search:
- Search for value: "Find target in sorted array"
- Search for boundary: "Find first/last occurrence"
- Search in answer space: "Find minimum X such that condition(X) is true"
Essential problems:
- Binary Search (implement from memory every day)
- First Bad Version
- Search in Rotated Sorted Array
- Find Minimum in Rotated Sorted Array
- Koko Eating Bananas (binary search on answer)
- Capacity To Ship Packages Within D Days
Practice technique: Write a binary search template and use it for every problem. Modify as needed but keep the structure consistent.
Week 6 Trees & Recursion
Mental model: "A tree is just recursion with base cases."
Before anything else, memorize:
- Inorder traversal (left → root → right)
- Preorder traversal (root → left → right)
- Postorder traversal (left → right → root)
- Level-order (BFS with queue)
Core problems (in order):
- Maximum Depth of Binary Tree
- Same Tree
- Invert Binary Tree
- Diameter of Binary Tree
- Balanced Binary Tree
- Lowest Common Ancestor
- Validate BST
- Kth Smallest Element in BST
- Binary Tree Level Order Traversal
- Serialize and Deserialize Binary Tree
Pro tip: For every tree problem, first identify if you need DFS (recursion) or BFS (queue). 80% of the time it's DFS.
Week 7 Heaps & Priority Queues
When to use heaps:
- Problem mentions "Kth largest/smallest"
- Need to track min/max dynamically
- Merging K sorted things
- Finding median of stream
Key insight: Min-heap for Kth largest, max-heap for Kth smallest (counter-intuitive but true).
Must-solve:
- Kth Largest Element in Array
- Top K Frequent Elements
- K Closest Points to Origin
- Merge K Sorted Lists
- Find Median from Data Stream
Week 8 Intervals & Greedy + First Mock
Interval pattern: Almost always starts with sorting by one dimension.
Problems:
- Merge Intervals
- Insert Interval
- Non-overlapping Intervals
- Meeting Rooms
- Meeting Rooms II
⚠️ Schedule Your First Mock Interview This Week
Why now: You've covered enough to attempt real interviews. Better to identify gaps early.
Format: 45 mins per problem, explain approach before coding, analyze complexity after.
What to practice:
- Asking clarifying questions
- Thinking out loud
- Handling hints without giving up
- Explaining trade-offs
Phase 3: Advanced Topics (Days 61-90)
Final push: Cover the hardest topics while doing weekly mock interviews.
Week 9 Graphs - BFS & DFS
The mindset: "Graph = nodes + edges. Most problems are about traversal or connectivity."
Before solving problems:
- Implement adjacency list representation from scratch
- Implement BFS with queue
- Implement DFS with stack and recursively
Essential problems:
- Number of Islands
- Clone Graph
- Pacific Atlantic Water Flow
- Course Schedule (cycle detection)
- Course Schedule II (topological sort)
- Graph Valid Tree
- Number of Connected Components
Pattern recognition:
- Shortest path in unweighted graph → BFS
- Explore all possibilities → DFS
- Cycle detection → DFS with visited + recursion stack
- Topological sort → DFS + stack or Kahn's algorithm
Week 10 Dynamic Programming - Introduction
DP demystified: "Recursion + caching = DP. That's it."
The process (for every DP problem):
- Write brute force recursion (identify subproblems)
- Add memoization (cache results)
- Convert to bottom-up tabulation (if needed)
- Optimize space (if possible)
Start with 1D DP:
- Climbing Stairs
- House Robber
- House Robber II
- Longest Increasing Subsequence
- Coin Change
- Coin Change 2
Key skill: Define state clearly. "What does dp[i] represent?" must be crystal clear.
Mock Interview #2
Schedule 2nd mock this week. Focus on explaining your thought process for DP problems step-by-step.
Week 11 Dynamic Programming - Advanced
2D DP problems:
- Unique Paths
- Longest Common Subsequence
- Edit Distance
- Distinct Subsequences
- Regular Expression Matching
Backtracking (DP's cousin):
- Subsets
- Subsets II
- Permutations
- Combination Sum
- Word Search
- N-Queens
Mock Interview #3
This week do a full 2-problem mock (90 mins total). Simulate real interview pressure.
Week 12 Final Review & Mock Marathon
This week is different: No new topics. Only review and mock interviews.
Daily structure:
- Morning (1 hour): Review weakest patterns from tracking
- Afternoon (1.5 hours): Solve 2-3 problems on timer
- Evening: Mock interview or watch your recorded mocks
Goal: Do 4-5 mock interviews this week. Get comfortable being uncomfortable.
Self-assessment checklist:
- Can solve 80%+ easy problems in <10 mins
- Can solve 60%+ medium problems in <25 mins
- Recognize pattern within first 2-3 mins of reading problem
- Can explain complexity without hesitation
- Ask clarifying questions automatically
The Spaced Repetition System (How to Actually Remember)
Here's the system that makes everything stick:
The Review Schedule
| Review |
When |
What to Do |
Time |
| Initial Solve |
Day 0 |
Solve problem, write notes on pattern |
30-45 mins |
| Review 1 |
Day 1 |
Read your notes, recall approach |
5 mins |
| Review 2 |
Day 3 |
Re-solve without looking at code |
15-20 mins |
| Review 3 |
Day 7 |
Explain solution out loud, check edge cases |
10 mins |
| Review 4 |
Day 14 |
Quick re-solve + complexity analysis |
5-10 mins |
| Review 5 |
Day 30 |
Pattern check-in (if it's important) |
5 mins |
What to Write in Your Notes
For every problem, save this info:
- Problem name & link
- Pattern tags (e.g., "Sliding Window", "Two Pointers")
- Key insight in one sentence (e.g., "Use hash map to store complements")
- Complexity (Time & Space)
- Gotchas (edge cases you missed initially)
- Similar problems (link 2-3 related problems)
Your Daily Routine (Hour-by-Hour Breakdown)
Here's exactly how to structure your 2.5 hours:
Option 1: Morning Person (6:00 AM - 8:30 AM)
- 6:00-6:20 (20 mins): Review yesterday's problems
- Look at your notes from past 3 days
- Re-solve 1-2 problems from memory
- Update review dates
- 6:20-7:50 (90 mins): New problems
- Read problem carefully (5 mins)
- Identify pattern & discuss approach (5 mins)
- Code solution (20-30 mins)
- Test with examples (5 mins)
- Repeat for 2-3 problems
- 7:50-8:10 (20 mins): Dry run practice
- Pick one problem from today
- Trace through code on paper with example input
- Helps catch logic errors
- 8:10-8:30 (20 mins): Wrap up
- Write notes for today's problems
- Tag patterns and difficulty
- Schedule reviews
- Identify what felt hard (revisit tomorrow)
Option 2: Evening Person (8:00 PM - 10:30 PM)
Same structure, different time. Key is consistency—same time every day builds habit.
Weekend Deep Dive (3-4 hours)
- Saturday: Tackle harder problems, review weak patterns
- Sunday: Mock interview + review all week's problems
How to Track Your Progress
Tracking isn't optional. Without it, you'll solve the same types repeatedly and ignore weak areas.
What to Track
| Metric |
Why It Matters |
Target |
| Problems solved by difficulty |
Ensure balanced practice |
60% medium, 30% easy, 10% hard |
| Problems by topic |
Identify weak areas |
15-30 problems per major topic |
| Problems by pattern |
Build pattern recognition |
10-15 per pattern |
| Review completion rate |
Measure retention efforts |
90%+ reviews done on time |
| Time per problem |
Track speed improvement |
Medium in <25 mins by Day 90 |
| Mock interview scores |
Real interview readiness |
Pass 4/5 mocks by end |
✅ Using DSAPrep Tracker
Instead of spreadsheets:
- Auto-schedules reviews (1d → 3d → 7d → 14d → 30d)
- Shows pattern coverage heatmap
- Surfaces "due today" problems automatically
- Tracks time spent and weak topics
- Export progress for mock interview prep
Try DSAPrep Tracker (free for 50 problems) →
Common Mistakes to Avoid (Learn From Others' Failures)
Mistake 1: Watching Solutions Instead of Struggling
What happens: You watch a solution video after 10 mins of trying. Feel smart. Forget everything next day.
Why it fails: Learning happens during struggle, not passive watching.
Fix: Struggle for 30-40 mins before looking at hints. Write your broken solution first, then improve.
Mistake 2: Not Doing Spaced Repetition
What happens: Solve 400 problems. Remember maybe 50.
Why it fails: Forgetting curve beats you every time.
Fix: Schedule reviews religiously. They're more valuable than new problems.
Mistake 3: Only Doing Easy or Only Hard
What happens: Either you plateau at easy or burn out on hard.
Why it fails: Skills need progressive overload.
Fix: 60% medium, 30% easy (for speed), 10% hard (for stretch).
Mistake 4: Coding Silently
What happens: Can solve problems alone but freeze in interviews.
Why it fails: Interviews test communication as much as coding.
Fix: Practice explaining out loud every single day. Pretend you're in an interview.
Mistake 5: No Mocks Until the End
What happens: First mock reveals massive gaps too late to fix.
Why it fails: Interview skills are separate from problem-solving skills.
Fix: Start mocks at Week 8. Do one every week minimum.
Mistake 6: Switching Languages Mid-Prep
What happens: Waste time on syntax instead of patterns.
Why it fails: Cognitive load splits between language and algorithms.
Fix: Pick one language (Python/Java/C++) and stick with it. Learn libraries cold.
Frequently Asked Questions
Q: What if I can't do 2-3 hours daily?
A: Extend to 120 days with 1.5-2 hours daily. Don't compress—quality beats speed. Minimum viable: 1 hour review + 1 hour new problems.
Q: Should I learn algorithms (Dijkstra, Kruskal, etc.) deeply?
A: Not for most product company interviews. Know they exist, understand time complexity, but don't memorize implementations. Focus on patterns instead.
Q: What if I get stuck on every problem?
A: Step back to easier problems. Getting stuck 100% of time = learning too fast. Target: solve 60-70% independently by Week 6.
Q: Which language should I use?
A:
- Python: Cleanest syntax, fast to code, but slower runtime (fine for 95% of interviews)
- Java: Verbose but great for OOP-heavy roles
- C++: Best for performance-critical roles or competitive programming background
Pick the one you're most comfortable with for systems programming.
Q: Do I need to solve ALL problems on LeetCode?
A: No. 300-400 well-chosen, well-reviewed problems beats 1000 random problems every time. Quality and repetition > quantity.
Q: What about system design?
A: If applying for senior roles (4+ YoE), allocate Week 11-12 to system design basics. For junior roles, DSA is 90% of prep.
Q: Can I start at Phase 2 if I know basics?
A: Test yourself: solve 10 random easy problems in <10 mins each. If you pass 9/10 consistently, skip to Phase 2. Otherwise, build foundation properly.
Start Your 90-Day Journey Today
Ninety days from now, you'll look back at problems that scared you today and think "Oh, that's just sliding window with a hash map."
The difference between you and people who pass these interviews isn't intelligence. It's:
- A structured plan (you have it now)
- Consistency (2-3 hours daily, no exceptions)
- Spaced repetition (the secret sauce)
- Deliberate practice (not just grinding)
Your Next Steps
- Today: Solve your first two pointer problem (Two Sum)
- Tomorrow: Set up tracking system (DSAPrep Tracker or spreadsheet)
- This week: Complete Week 1 roadmap (6 array problems + reviews)
- Week 8: Schedule your first mock interview
- Day 90: You're interview-ready
🚀 Track Your 90-Day Journey with DSAPrep
Start today. One problem at a time. One review at a time. Future you will thank present you.