You've learned loops. You understand functions. Arrays make sense to you.
And then LeetCode shows you a problem and your mind goes completely blank.
This is not a syntax problem. This is a logic problem — and it's the most common place where beginners get stuck for months without knowing why.
This article gives you a concrete, repeatable 6-step framework that you can apply to every coding problem — from your first Easy on LeetCode to a live SDE interview at an MNC.
No vague advice. No "just practice more." A real process.
Why You're Getting Stuck (It's Not What You Think)
Most developers hit the same five failure points:
- Reading the problem once and immediately reaching for the keyboard
- Treating every new problem as unique instead of spotting patterns
- Never doing a manual dry run before writing code
- Missing edge cases that break the solution on actual inputs
- Stopping at brute force with no optimization mindset
Each step below fixes one of these directly.
The 6-Step Framework
Step 1 — Read the Problem. Then Read It Again.
Spend the first 3–5 minutes only on the problem statement. Extract four things before writing anything:
- Input format — array? string? integer? graph?
- Output format — return value or print?
-
Constraints —
n ≤ 10^5means O(n log n) or better. Constraints tell you which approach is even legal. - Edge cases — empty input? negative numbers? single element? all duplicates?
Constraints are not fine print. They are the most important line in the problem.
Step 2 — Work Through Examples Manually
Do not just read the given examples. Build your own test cases and trace through them by hand — on paper, in a notepad, anywhere.
This forces your brain to discover the algorithm through observation rather than guessing it. Kadane's Algorithm for maximum subarray becomes obvious once you trace five examples step by step. You don't need to memorize it — you'll re-derive it.
Always trace:
- ✅ A normal case
- ✅ An edge case (empty input, single element)
- ✅ A case with all identical values or all negatives
Step 3 — Identify the Pattern
This is the most high-leverage skill in DSA. Most competitive coding problems reduce to a small, finite set of patterns. Your job is pattern recognition, not invention from scratch.
| Pattern | When It Applies |
|---|---|
| Sliding Window | Fixed or variable subarrays/substrings |
| Two Pointers | Sorted arrays, pair sums, palindrome checks |
| Binary Search | Sorted data, minimizing/maximizing an answer |
| BFS / DFS | Trees, graphs, shortest paths, regions |
| Dynamic Programming | Overlapping subproblems, optimal substructure |
| Hashing | Frequency counts, duplicate detection, O(1) lookup |
| Backtracking | Permutations, subsets, constraint satisfaction |
| Heap / Priority Queue | Top-K elements, median in a stream |
Train yourself to ask immediately: "Which pattern does this look like?"
That one habit cuts problem-solving time in half.
Step 4 — Pseudocode First. Always.
This is the step most people skip. It is the reason most people get stuck mid-implementation.
Pseudocode forces you to design the algorithm in plain language before syntax enters the picture. Once the logic is validated against your manual examples, converting to actual code becomes mechanical.
Example — Check if a string is a palindrome:
1. Set left = 0, right = last index
2. While left < right:
a. If s[left] != s[right] → return false
b. Move left forward, right backward
3. Return true
Write this clearly before you open your IDE. It will save more debugging time than any other habit.
Step 5 — Write Clean, Modular Code
When you finally write code, follow three rules:
1. Meaningful variable names
# Bad
x = arr[l] + arr[r]
# Good
current_sum = arr[left_pointer] + arr[right_pointer]
2. Break complex logic into helper functions
A solve() function calling smaller, named helpers is far easier to debug and reason about than one 80-line block.
3. Handle edge cases at the top
def two_sum(nums, target):
if not nums or len(nums) < 2:
return []
# main logic below
Edge cases at the top, not buried in the middle of your code.
Step 6 — Analyze Complexity, Then Optimize
A working solution is a starting point. An efficient solution is the actual goal.
After writing your solution, always ask:
- What is the time complexity?
- What is the space complexity?
- Does this fit within the problem's constraints?
Quick reference:
| Constraint (n) | Max Acceptable Complexity |
|---|---|
| n ≤ 100 | O(n³) |
| n ≤ 10³ | O(n²) |
| n ≤ 10⁵ | O(n log n) |
| n ≤ 10⁶ | O(n) |
| n ≤ 10⁹ | O(log n) |
If you're over budget, look for a pattern swap — nested loops → hashing, sorting → binary search, recursion → DP.
Four Mental Models Worth Building
Reduction — Can this problem be reduced to a known one? "K-th smallest element" reduces to a heap or sorted array problem.
Inversion — Counting what you don't want is sometimes easier. Arrays that DON'T satisfy condition X = Total − Arrays that DO.
Invariants — What stays constant throughout the algorithm? In binary search, the answer always lies in [left, right]. Lock in that invariant and you can't go wrong.
State Representation — In DP and graph problems, define your state explicitly before writing the recurrence. Shortest path: (node, cost). Knapsack: (item_index, remaining_capacity).
Mistakes That Will Cost You in Interviews
- Coding in the first 2 minutes. Minimum 5 minutes on understanding before typing.
- Not testing your code manually. Run at least 2 test cases by hand after implementation.
-
Ignoring constraints.
n ≤ 10^9kills O(n²) immediately. Check before choosing your approach. - Staying silent in interviews. Interviewers evaluate your thinking process, not just the final code.
- Looking at solutions too fast. Spend 20–30 minutes of real effort before checking hints. The struggle is the practice.
The Real Truth About Logic Building
Every developer who solves problems fast has run this exact process hundreds of times until it became automatic. The speed is the result of repetition, not some natural aptitude.
Follow the framework. Stay consistent. The fluency comes with time.
For the full version of this framework — including a complete practice problem set organized by difficulty (beginner to advanced), a DSA pattern recognition table, and a phase-wise roadmap — read the original article:
👉 Logic Building 101: A Step-by-Step Framework to Solve Coding Problems — CodePractice.in
Written by Bikki Singh — Full Stack Developer and Founder of CodePractice.in
Top comments (0)