The Blind 75 LeetCode Problems: Every Interview Pattern, No Gaps

May 29, 202616 min read
interview-prepdsaleetcodealgorithms
The Blind 75 LeetCode Problems: Every Interview Pattern, No Gaps
TL;DR
  • Blind 75 gaps fixed: the original list skips backtracking, tries, greedy, and intervals — this version adds all four
  • Pattern over problem: each of the 75 problems is the canonical representative of a recognizable interview structure
  • 48 mediums are enough for most standard FAANG loops; the 8 hard problems target L5+ and staff roles
  • Work by section: finish every problem in a section before moving on to build genuine pattern recognition, not isolated recall
  • Log the signal, not the count: after each problem, write down what clue should have pointed you to the approach before you started
  • Information flow decides tree problems: pass constraints down for validation, return values up for subtree properties

In 2018, a Meta engineer named Yangshun Tay posted a list on Teamblind: 75 problems, every major pattern, no filler. It got copy-pasted, bookmarked, and passed around Discord servers until half the industry treated it like a sacred text. The Blind 75 LeetCode problems list is genuinely good. It also has gaps.

No tries. No backtracking. No greedy. No intervals. A thin stack section. One company's interview patterns from six years ago.

The list below patches those gaps while staying at 75. Every problem earns its spot by teaching something the others don't. If you can solve all 75 and explain why you solved them the way you did, you are ready for any standard FAANG loop.


The Problems Don't Matter. The Patterns Do.

You can solve 400 problems and still fail if you grind them as isolated puzzles. The reason these 75 work is that each problem is the canonical representative of a recognizable structure. When you see a new problem, you should be mapping it to a pattern, not frantically Ctrl-F'ing your memory for a similar problem title. If that sounds obvious, most people are still not doing it.

Work through each section. Once a pattern clicks, the other problems in that section start feeling like variations on a theme, because they are. This is either deeply satisfying or mildly unsettling, depending on how many hours you've already spent treating them as unrelated.


Arrays and Hashing

The warmup section doubles as the foundation. If you can't hold state in a hash map while scanning, everything downstream breaks. Two Sum is basically the Hello World of this discipline. Embarrassingly simple in hindsight. Yet here we all are.

#ProblemDiffWhat it teaches
1Two Sum (1)EComplement lookup: O(n) by trading space for a second pass
2Contains Duplicate (217)EHash set membership; the O(1) existence check
3Group Anagrams (49)MSorted string as canonical key; all anagrams map to the same key
4Product of Array Except Self (238)MTwo-pass left/right product; division-free trick earns its own insight
5Longest Consecutive Sequence (128)MOnly start counting from unstarted elements; avoid redundant O(n²) chains

Two Pointers

Two pointers eliminate the second loop. The insight is always the same: moving a pointer toward the center is equivalent to rejecting all states you skip over. This sounds like something a professor says right before it clicks, then feels obvious forever after.

#ProblemDiffWhat it teaches
6Valid Palindrome (125)ESkip-logic while advancing; the two-pointer skeleton
73Sum (15)MSort, fix one element, two-pointer the rest; dedup by skipping equal values
8Container With Most Water (11)MGreedy argument: only the shorter side can possibly improve
9Trapping Rain Water (42)MWhen leftMax < rightMax, the left bar is the bottleneck regardless of what's right

Sliding Window

Every sliding window problem asks one of two things: the longest window satisfying a condition, or the shortest window that does. The template is the same; the shrink condition changes. Which is roughly the most useful and simultaneously most unhelpful thing you can say. The full mechanics are in the sliding window guide if you want the derivation before you start.

#ProblemDiffWhat it teaches
10Best Time to Buy and Sell Stock (121)ESliding minimum; the simplest dynamic window
11Longest Substring Without Repeating Characters (3)MShrink on first repeated character
12Longest Repeating Character Replacement (424)MThe max_count approximation: you don't need the exact current max
13Minimum Window Substring (76)HExpand until valid, contract until invalid; a need counter avoids inner loops
14Sliding Window Maximum (239)HMonotonic deque: pop front when expired, pop back when smaller than new element

Stack

Stacks solve problems where you need to remember unresolved things and resolve them later. That sounds vague until you notice half your interview problems fit that description. The stack is the data structure that keeps showing up uninvited, and it's usually right.

#ProblemDiffWhat it teaches
15Valid Parentheses (20)EUnresolved openers live on the stack; closed by matching closers
16Min Stack (155)MParallel min-tracking stack; synced push/pop maintains the invariant
17Daily Temperatures (739)MWaiting room: elements wait on the stack for a warmer day to pop them
18Largest Rectangle in Histogram (84)HContribution counting: each bar is the minimum of some rectangle; stack finds the width

Binary Search

Binary search is not a search algorithm. It is a way to halve a decision space whenever a monotonic predicate exists. LC 704 is the template. Everything else is a different predicate. This distinction feels like splitting hairs until you're staring at Koko Eating Bananas wondering why the array has nothing to do with anything.

#ProblemDiffWhat it teaches
19Binary Search (704)EClosed-interval [lo, hi] invariant; lo + (hi - lo) // 2 avoids overflow
20Search in Rotated Sorted Array (33)MIdentify which half is sorted; recurse on the sorted half
21Find Minimum in Rotated Sorted Array (153)MBinary search for the inflection point, not a target value
22Koko Eating Bananas (875)MSearch the answer space with a feasibility predicate; array is irrelevant
23Median of Two Sorted Arrays (4)HBinary search on a partition of two arrays; O(log(min(m,n)))

Linked List

Linked list problems are solved by one of three techniques: the sentinel node (eliminates edge cases), the two-pointer gap (nth from end, cycles), or the find-middle-and-reassemble pattern. Linked lists are the data structure interviewers love and real engineers almost never actually use in production. Enjoy the irony.

#ProblemDiffWhat it teaches
24Reverse Linked List (206)Eprev/curr/next iteration; memorize both iterative and recursive
25Merge Two Sorted Lists (21)ESentinel node: a dummy head removes the "empty list" special case
26Linked List Cycle (141)EFast-slow pointer: cycle means they meet
27Remove Nth Node From End (19)MGap of N+1: advance fast pointer first, then move both
28Reorder List (143)MFind middle, reverse second half, interleave; three primitives fused
29Merge K Sorted Lists (23)HMin-heap of size k; O(n log k) vs O(nk) naive

Trees

Tree problems split into two families: problems where you return a value upward (compute subtree properties) and problems where you pass a value downward (validate constraints). Knowing which direction the information flows decides your approach before you write a line. This is the kind of thing that sounds obvious after you've seen it enough and completely invisible before.

#ProblemDiffWhat it teaches
30Invert Binary Tree (226)ERecursive swap; the simplest DFS
31Maximum Depth of Binary Tree (104)EReturn height upward; base case
32Diameter of Binary Tree (543)EGlobal max updated internally, local height returned; these diverge for the first time here
33Binary Tree Level Order Traversal (102)MBFS snapshot trick: loop for _ in range(len(queue)) to process one level
34Validate BST (98)MPropagate range [min, max] downward; parent comparison alone fails
35Lowest Common Ancestor of Binary Tree (236)MPost-order: if both children return non-null, this node is the LCA
36Construct Tree from Preorder and Inorder (105)MPreorder[0] is root; find it in inorder to split left/right subtrees
37Binary Tree Right Side View (199)MBFS: last node per level. DFS: only record when depth == result length
38Kth Smallest Element in BST (230)MInorder traversal is sorted; decrement counter, return on zero
39Binary Tree Maximum Path Sum (124)HEach node returns max gain upward; global answer considers both children

Tries

A trie is the right tool when you need prefix queries over a fixed dictionary. The first time it works, it feels like magic. The second time, you wonder why you ever used anything else. Two problems cover everything you need.

#ProblemDiffWhat it teaches
40Implement Trie (208)MTrieNode with children and is_end; prefix search differs from word search
41Word Search II (212)HDFS pruning via trie; set is_end = False after finding to avoid re-reporting

Heap / Priority Queue

A heap answers one question efficiently: what is the best element so far? It is the data structure equivalent of "sorted, but only the part you actually need." Every heap problem reduces to tracking a running set of k best elements or merging sorted streams.

#ProblemDiffWhat it teaches
42Kth Largest Element in Array (215)MMin-heap of size k; the kth-largest becomes the heap minimum
43K Closest Points to Origin (973)MMax-heap of size k, or quickselect for O(n) average
44Task Scheduler (621)MFormula: (max_count - 1) * (n + 1) + count_of_max; teaches modeling over simulation
45Find Median from Data Stream (295)HTwo heaps (max-heap for lower half, min-heap for upper); balance after each insert

Backtracking

The original Blind 75 has no backtracking. This is one of its real gaps, and also a little ironic for a list people keep coming back to and revising. Subsets, combinations, and permutations each have a distinct tree shape and cost. Learn all three. They show up constantly.

#ProblemDiffWhat it teaches
46Subsets (78)MInclude/exclude at each index; O(n·2^n)
47Combination Sum (39)MReuse allowed via same-index recursion; start index prevents duplicates
48Permutations (46)Mused[] array; every branch has n choices; O(n·n!)
49Word Search (79)MDFS with in-place marking; restore the cell on backtrack
50Palindrome Partitioning (131)MBacktracking combined with palindrome check; prune early on non-palindromes

Graphs

Graph problems test two things: traversal mechanics and the ability to model a problem as a graph. The second part is harder. Islands and courses look nothing alike, but they use the same DFS skeleton. Most of what makes graph problems feel hard is the modeling step, not the traversal.

#ProblemDiffWhat it teaches
51Number of Islands (200)MOuter loop is mandatory for disconnected graphs
52Pacific Atlantic Water Flow (417)MReverse BFS from both coasts; intersection is the answer
53Clone Graph (133)MHash map node → clone prevents infinite recursion on cycles
54Course Schedule (207)MTopological BFS: cycle = processed count != n
55Course Schedule II (210)MTopological order as output, not just feasibility
56Redundant Connection (684)MUnion-Find: add edge, detect same component before union
57Network Delay Time (743)MDijkstra template on a directed weighted graph
58Cheapest Flights Within K Stops (787)MBellman-Ford with K+1 passes; snapshot copy prevents same-pass cascades

Intervals

Every interval problem reduces to the same two operations: checking whether two intervals overlap and deciding how to merge them. The overlap predicate is a.start <= b.end AND b.start <= a.end. Using max() in the merge step is not optional and is exactly the step most people skip, resulting in silent containment bugs that are very fun to debug at midnight.

#ProblemDiffWhat it teaches
59Merge Intervals (56)MSort by start; max(current.end, prev.end) is not optional on containment
60Insert Interval (57)MThree-phase scan without resorting: before, overlap, after
61Non-overlapping Intervals (435)MActivity selection: sort by end time, greedily keep earliest-ending

1D Dynamic Programming

DP is recursion with a cache. The state design is the whole problem. Every problem below has a simple recurrence once you identify what the state is. The hard part is not the code. The dynamic programming framework covers how to find the state before you touch a problem.

#ProblemDiffWhat it teaches
62Climbing Stairs (70)EFibonacci recurrence as DP intro; state = steps remaining
63House Robber (198)Mdp[i] = max(dp[i-1], dp[i-2] + nums[i]); rolling two variables
64House Robber II (213)MCircular breaks DP; run twice excluding first/last element
65Coin Change (322)MUnbounded knapsack; initialize to infinity, iterate low-to-high
66Longest Increasing Subsequence (300)MO(n²) DP or O(n log n) patience sorting; both worth knowing
67Word Break (139)MDP with inner loop over word lengths; teaches string DP
68Decode Ways (91)MTwo lookback values; the edge case where digit is '0' is the whole problem
69Partition Equal Subset Sum (416)M0/1 knapsack; iterate capacity high-to-low or you reuse elements in the same pass

2D Dynamic Programming

When state depends on two sequences or a grid, the recurrence becomes a table. Space can often be compressed to one row. This feels great. Then you try to reconstruct the path and realize you threw away the information you needed. Such is life.

#ProblemDiffWhat it teaches
70Unique Paths (62)MGrid DP; dp[i][j] = dp[i-1][j] + dp[i][j-1]
71Longest Common Subsequence (1143)MThe canonical 2D string DP; match on equal chars, skip on mismatch
72Edit Distance (72)HThree operations; min(insert, delete, replace) + 1
73Burst Balloons (312)HInterval DP inversion: think about the last balloon popped, not the first

Bit Manipulation

The original Blind 75 has five bit manipulation problems. Most of them teach the same trick. Two cover everything you need. Bit manipulation is the interview equivalent of a party trick: impressive once, slightly tedious the fifth time, but you still have to know it.

#ProblemDiffWhat it teaches
74Number of 1 Bits (191)En & (n-1) clears the lowest set bit; count iterations
75Missing Number (268)EXOR all indices and values; self-cancellation leaves the missing one

How to Work Through This List

Do not solve them in order. Work by section. Finish every problem in a section before moving on.

For each problem: 30-minute timer, no hints, no peeking at the tag. When you finish, write down the pattern signal that should have told you the approach before you started. That log is what actually builds interview skill. Your solved count is for telling people at dinner parties. The pattern log is for getting offers.

The hardest problems in most sections (84, 76, 239, 4, 124, 295, 72, 312) are skippable unless you are targeting Google L5+ or a staff-level role. Most interviewers want a medium solved cleanly with clear communication. That is 48 of the 75 problems above. The case for focusing on mediums is worth reading before you start.

If you want to drill specifically for voice-based technical interviews, SpaceComplexity lets you work through these problems out loud with an AI interviewer that scores your explanation, not just your code. Most candidates who can solve LC 743 silently still cannot explain Dijkstra's relaxation loop under pressure. That gap shows up in the debrief.


Further Reading