HomeCoursesGrokking the Coding Interview Patterns
Updated today
4.9
Save

Grokking the Coding Interview Patterns

Grokking the Coding Interview saves you countless hours of grinding LeetCode. Master the 28 coding patterns behind most coding interview problems. Developed by and for MAANG engineers.

Select your Language
C#
C++
Go
Java
JavaScript
Python
Select your Language
PythonPython
Created by Fahim ul Haq
Grokking the Coding Interview Patterns
What's included
  • 1125 lessons across 31 modules
  • 579 quizzes with instant feedback
  • with scoring rubrics
  • on every lesson
Why this course
  • Ace MAANG Coding InterviewsSolve unseen problems under pressure in timed technical loops.
  • Crack Unfamiliar Problems FastMap any new question to a proven strategy within minutes.
  • Optimize Code in ProductionSpot slow paths and choose leaner algorithms in code reviews.
  • Defend Your Solution ChoicesExplain complexity and trade-offs clearly to interviewers and peers.
Who wrote it
Fahim ul Haq
Software Engineer, Distributed Storage at Meta and Microsoft, Educative (Co-founder & CEO)

Fahim ul Haq is the co-founder and CEO of Educative, a hands-on learning platform for software engineers. He spent nearly a decade as a software engineer at Microsoft and Meta, where he gained deep experience building large-scale distributed systems. His work spanned Project Red Dog at Microsoft, which evolved into Microsoft Azure, and Scuba, Meta's real-time data analytics engine. In 2015, Fahim co-founded Educative to help developers get hands-on with new skills. Fahim's courses have helped hundreds of thousands of engineers learn System Design and prepare for technical interviews. Fahim earned his M.S. in Computer Science from the University of Washington in 2015.

Join 3.1 million developers at

Join 3.1 million developers at

What you'll learn

  • Identify and apply coding interview patterns to solve algorithmic problems effectively
  • Utilize data structures such as arrays, linked lists, stacks, and queues in coding challenges
  • Implement sorting and searching algorithms to optimize problem-solving efficiency
  • Analyze and apply dynamic programming techniques to tackle complex problems
  • Employ graph algorithms to solve connectivity and traversal challenges
  • Develop proficiency in string manipulation and pattern recognition for coding interviews

Learning Roadmap

1.

Two Pointers

Master the Two Pointers pattern: move two pointers through arrays, strings, or linked lists to find pairs, reverse, or partition data in linear time without nested loops.

Introduction to Two Pointers
Valid Palindrome
easy
3Sum
med
Remove nth Node from End of List
med
Sort Colors
med
Reverse Words in a String
med
Valid Word Abbreviation
easy
Valid Palindrome II
easy
Lowest Common Ancestor of a Binary Tree III
med
Strobogrammatic Number
easy
Minimum Number of Moves to Make Palindrome
hard
Next Palindrome Using Same Digits
hard
Count Subarrays With Fixed Bounds
hard
Find the Lexicographically Largest String From Box II
hard
Get the Maximum Score
hard
Create Maximum Number
hard
Append Characters to String to Make Subsequence
med
Squares of a Sorted Array
easy
Reverse String
easy
Intersection of Two Linked Lists
easy
Partition Labels
med
Remove Element
easy
String Compression
med
Rotate Array
med
Next Permutation
med
Remove Duplicates from Sorted Array
easy
Reverse Vowels of a String
easy
Is Subsequence
easy
Merge Strings Alternately
easy
Compare Version Numbers
med
Move Zeroes
easy
Longest Subarray of 1's After Deleting One Element
med
Backspace String Compare
easy
Next Greater Element III
med
Rotating the Box
med
Count the Number of Fair Pairs
med
Remove Duplicates from Sorted List II
med
Sum of Square Numbers
med
Shuffle the Array
easy
Rotate String
easy
Max Number of K-Sum Pairs
med
Repeated Substring Pattern
easy
Reverse Words in a String III
easy
3Sum Closest
med
Push Dominoes
med
Rearrange Array Elements by Sign
med
Reverse String II
easy
Sort Array By Parity
easy
Long Pressed Name
easy
Valid Mountain Array
easy
Remove Duplicates from Sorted Array II
med
Two Sum II - Input Array Is Sorted
med
Swap Adjacent in LR String
med
Expressive Words
med
Last Substring in Lexicographical Order
hard
Bag of Tokens
med
Check If String Is a Prefix of Array
easy
Reformat Phone Number
easy
K-diff Pairs in an Array
med
Longest Mountain in Array
med
Meeting Scheduler
med
Maximize Greatness of an Array
med
Find the Original Typed String I
easy
Find Beautiful Indices in the Given Array II
hard
Zigzag Iterator
med
Length of Last Word
easy
Capitalize the Title
easy
Number of Distinct Averages
easy
Apply Operations to an Array
easy
Maximum Enemy Forts That Can Be Captured
easy
Minimum Common Value
easy
Merge Two 2D Arrays by Summing Values
easy
Remove Trailing Zeros From a String
easy
Lexicographically Smallest Palindrome
easy
Check if a String Is an Acronym of Words
easy
Substring Matching Pattern
easy
Generate Tag for Video Caption
easy
Reverse String Prefix
easy
The k Strongest Values in an Array
med
Ways to Split Array Into Three Subarrays
med
Minimize Maximum Pair Sum in Array
med
Adding Spaces to a String
med
Watering Plants II
med
Partition Array According to Given Pivot
med
Move Pieces to Obtain a String
med
Check if All A's Appears Before All B's
easy
Find the Encrypted String
easy
Trim Trailing Vowels
easy
Number of Subsequences That Satisfy the Sum Condition
med
One Edit Distance
med
3Sum Smaller
med
Sort Transformed Array
med
Reverse Only Letters
easy
3Sum With Multiplicity
med
Intersection of Three Sorted Arrays
easy
Shortest Subarray to be Removed to Make Array Sorted
med
Split Two Strings to Make Palindrome
med
Check If Two String Arrays are Equivalent
easy
Form Array by Concatenating Subarrays of Another Array
med
Minimum Length of String After Deleting Similar Ends
med
Maximum Score of a Good Subarray
hard
Sentence Similarity III
med
Maximum Distance Between a Pair of Values
med
Longest Common Subsequence Between Sorted Arrays
med
Two Furthest Houses With Different Colors
easy
Valid Palindrome IV
med
Maximum Matching of Players With Trainers
med
Merge Operations to Turn Array Into a Palindrome
med
Subsequence With the Minimum Score
hard
Find the Maximum Number of Marked Indices
med
Sorting Three Groups
med
Minimum Array Length After Pair Removals
med
The Wording Game
hard
Count the Number of Incremovable Subarrays I
easy
Find Beautiful Indices in the Given Array I
med
Minimize Length of Array Using Operations
med
Minimum Time to Revert Word to Initial State I
med
Rotate Non Negative Elements
med
Concatenate Array With Reverse
easy
Compare Sums of Bitonic Parts
med
Reverse Letters Then Special Characters in a String
easy
Reverse K Subarrays
med
First Matching Character From Both Ends
easy
Limit Occurrences in Sorted Array
easy
Check ASCII Palindromic
easy
Faulty Sensor
easy
Number of Perfect Pairs
med
Minimum Flips to Make Binary Grid Palindromic I
med
Minimum Prefix Removal for a Strictly Increasing Array
med
Find First Palindromic String in the Array
easy
Construct Uniform Parity Array II
med
Minimum Swaps to Move Zeros to End
easy
Widest Possible Fence
hard
Divide Players Into Teams of Equal Skill
med
Find the Array Concatenation Value
easy
Count the Number of Incremovable Subarrays II
hard
Maximum Coin Collection
med
3.

Sliding Window

Use the Sliding Window pattern to process subarrays and substrings with a fixed or dynamic window, replacing nested loops with linear-time solutions.

4.

Intervals

Solve interval problems with confidence: merge overlapping ranges, insert new intervals, and find intersections or gaps for scheduling and timeline challenges.

5.

In-Place Manipulation of a Linked List

Reverse, reorder, and modify linked lists in place by rewiring node pointers, solving classic linked list problems in O(1) extra space without building new lists.

6.

Two Heaps

Use the Two Heaps pattern to split data between a min-heap and a max-heap, giving fast access to middle values for problems like finding the median of a data stream.

7.

K-way Merge

Learn K-way Merge to combine k sorted arrays, lists, or streams into one sorted output using a min-heap, solving merge and kth-smallest problems efficiently.

8.

Top K Elements

Find the k largest, smallest, or most frequent elements with the Top K Elements pattern, using heaps to handle large or streaming data without sorting everything.

9.

Modified Binary Search

Adapt binary search to find targets, first and last occurrences, peaks, and elements in rotated sorted arrays, cutting the search space in half at every step.

10.

Subsets

Generate all subsets, combinations, and permutations with the Subsets pattern, using backtracking, iteration, or bit manipulation to explore every choice.

11.

Greedy Techniques

Makes locally optimal choices at each step, aiming for a globally optimal solution in problem-solving scenarios, often without reassessment.

12.

Backtracking

Master backtracking to explore every possible choice, undo dead ends, and solve constraint problems like N-Queens, Sudoku, permutations, and combination sums.

13.

Dynamic Programming

Solves complex problems by breaking them into smaller overlapping subproblems and storing results to avoid redundant computations, optimizing time and space.

14.

Cyclic Sort

Use Cyclic Sort to place numbers from a 1 to n range at their correct index in place, quickly finding missing, duplicate, or misplaced numbers in O(n) time.

15.

Topological Sort

Learn Topological Sort to order nodes in a directed acyclic graph by their dependencies, solving course scheduling, build order, and task sequencing problems.

16.

Sort and Search

Combine sorting with binary search to organize data first and then query it fast, solving pairing, closest-value, and range problems more efficiently.

17.

Matrices

Solve matrix problems by traversing and transforming 2D grids: rotate, spiral, search, and update cells by row and column to master common grid challenges.

18.

Stacks

Use stacks and their last-in, first-out order to solve problems like balanced parentheses, expression evaluation, and undo operations with clean, efficient logic.

19.

Graphs

Learn graph fundamentals: represent nodes and edges, then traverse and analyze their connections to solve problems on networks, relationships, and paths.

20.

Tree Depth-First Search

Use Tree Depth-First Search to explore each branch fully before backtracking, solving path sum, tree height, and traversal problems with recursion or a stack.

21.

Tree Breadth-First Search

Use Tree Breadth-First Search to visit nodes level by level with a queue, solving level order traversal, minimum depth, and tree view problems efficiently.

22.

Trie

Learn the Trie (prefix tree) data structure to store words character by character, enabling fast prefix search, autocomplete, and word lookup.

23.

Hash Maps

Use hash maps to store key-value pairs with near constant-time lookup, insertion, and deletion, solving counting, frequency, and two-sum style problems fast.

24.

Knowing What to Track

Learn to track only the state a problem needs, such as counts, indices, or frequencies, to simplify logic and turn brute-force solutions into efficient ones.

25.

Union Find

Master Union Find (Disjoint Set Union) to merge sets and check connectivity fast, solving connected components, cycle detection, and network problems.

26.

Custom Data Structures

Design custom data structures, like LRU caches, by combining or extending standard ones to meet specific operation and performance requirements.

27.

Bitwise Manipulation

Use bitwise operations like AND, OR, XOR, and shifts to work directly on binary bits, solving problems like finding unique numbers and counting set bits.

28.

Math and Geometry

Applies mathematical concepts and geometric properties to solve problems efficiently, often involving calculations, number properties, coordinate geometry, or transformations.

29.

Challenge Yourself

Put your skills to the test with coding challenges across patterns, practicing how to spot the right approach and write efficient algorithms.

30.

Monotonic Stack

Use a Monotonic Stack that keeps elements in increasing or decreasing order to find the next or previous greater or smaller element in linear time.

31.

Prefix Sum

Use Prefix Sums to precompute running totals and answer any subarray sum query in constant time, solving range sum and subarray counting problems efficiently.

32.

Ordered Set

Use an Ordered Set to keep elements sorted as you insert, remove, and search, finding floor, ceiling, and kth elements efficiently in dynamic data.

33.

Segment Tree

Use a Segment Tree to answer range queries like sums, minimums, or maximums and update array values in O(log n) time, ideal for dynamic range query problems.

34.

Binary Indexed Tree

Learn the Binary Indexed Tree (Fenwick Tree) to compute prefix sums and update array elements in O(log n) time, solving range sum problems efficiently.

35.

Graph Depth-First Search

Use Graph Depth-First Search (DFS) to explore each path fully before backtracking, solving connectivity, pathfinding, and cycle detection problems.

36.

Graph Breadth-First Search

Use Graph Breadth-First Search (BFS) to explore a graph level by level with a queue, finding shortest paths in unweighted graphs and solving connectivity problems.

37.

State-Space BFS

Use State-Space BFS to explore possible states level by level, finding the fewest moves or transformations needed to reach a target, as in puzzles and word ladders.

38.

Grid as a Graph

Treat grid cells as graph nodes and neighboring moves as edges, then apply BFS and DFS to solve pathfinding, island counting, and region-based grid problems.

39.

Weighted Shortest Paths

Find minimum-cost paths in weighted graphs using Dijkstra's algorithm and related techniques, solving network delay, routing, and cheapest-path problems.

40.

Minimum Spanning Trees

Learn Minimum Spanning Trees with Kruskal's and Prim's algorithms to connect all nodes of a weighted graph at the lowest total cost, without any cycles.

41.

Advanced Graph Algorithms

Go beyond basic traversal with advanced graph algorithms for strongly connected components, cycle detection, connectivity, and network flow problems.

Course Author:

About this course
WHY I WROTE THIS COURSE
I created Grokking the Coding Interview because I watched too many talented engineers fail interviews they should have passed. At Microsoft and Meta, I saw firsthand what separated the candidates who succeeded from the ones who didn't. It wasn't how many LeetCode problems they'd solved. It was whether they could look at an unfamiliar problem and know how to approach it the right way. That's what this course teaches. Rather than throwing hundreds of disconnected problems at you, we organize the entire coding interview around 28 fundamental patterns. Each pattern is a reusable strategy. Once you understand two pointers, for example, you can apply them to dozens of problems you've never seen before. The course walks you through each pattern step by step, starting with the intuition behind it, then building through increasingly complex applications. As with every course on Educative, you will practice in a hands-on way with 500+ challenges, 17 mock interviews, and detailed explanations for every solution. The course is available in Python, Java, JavaScript, Go, C++, and C#, so you can prep in the language you'll actually use in your interview. Whether you're preparing for your first FAANG loop or brushing up after a few years away from interviewing, this course will give you a repeatable framework for cracking the coding interview.
ABOUT THE AUTHOR

Fahim ul Haq

Software Engineer, Distributed Storage at Meta and Microsoft, Educative (Co-founder & CEO)

Learn more about Fahim

Trusted by 3.1 million developers working at companies

Great content, both theoretical and in terms of the selected problems. I do feel much stronger now in tackling various problems and utilizing a diverse set of patterns.

V

Vlad

Learner

The flexibility to learn at my own pace, combined with a supportive community, kept me motivated and on track.

A

Abayomi O

Learner

One of my key goals was to enhance my problem-solving skills for coding interviews. Educative's Grokking the Coding Interview course was instrumental

A

Abayomi O

Learner

Educative has been a game-changer in my learning journey. I particularly appreciated the in-browser coding environments, which allowed me to practice without any setup hassles.

A

Abayomi O

Learner

Overall, it is excellent, I like the explanations very much and they are very detailed with picture animations.

J

John Tang

Learner

Your explanations are great. The diagrams help understand the concepts easily.

A

Anant Rao

Learner

Amazing experience. I learnt a lot of new things.

M

Md. A. Barik

Learner

Frequently Asked Questions

Is Java good for coding interviews?

Yes, Java is excellent for coding interviews. It’s a popular and widely used programming language in the industry and effectively supports core data structures and algorithms. Java’s strong typing and object-oriented features help write clear, maintainable code, making it a solid choice for technical interviews.

How to crack Java coding interviews?

To crack Java coding interviews, thoroughly understand the basics, including OOP principles (inheritance, encapsulation), Java data structures (arrays, lists, maps), exception handling, and multithreading. Practice coding problems on platforms like Educative, LeetCode, and HackerRank to apply these concepts effectively.

How can I prepare for a Java interview fast?

Practice coding by solving coding exercises and practice problems on platforms like Educative, LeetCode, and HackerRank to improve your problem-solving skills for the Java coding interview. Conduct mock interviews with friends, colleagues, or online platforms like Educative to simulate the real Java technical interview experience.

What are the coding patterns?

Coding patterns are common strategies or techniques for solving recurring coding problems asked in coding interviews. They include approaches like two pointer techniques, sliding windows, backtracking, greedy algorithms, and dynamic programming, which help efficiently tackle various algorithmic challenges.

Which coding platform is best for interviews?

LeetCode offers diverse problems for interview prep, and HackerRank is great for learning Python basics. However, Educative stands out by combining interactive lessons to learn Python deeply and coding challenges to practice, all in one platform, making it the ideal choice for comprehensive interview preparation.

Is Grokking the Coding Interview still relevant in 2026?

Yes. In 2026, coding interviews are more competitive than ever, with a strong focus on problem-solving patterns rather than memorizing solutions. This course remains highly relevant because it teaches reusable coding patterns that help you solve thousands of LeetCode-style problems efficiently.

Is it worth practicing coding interview questions in 2026?

Yes. In 2026, coding interviews still play a critical role in hiring at top tech companies. Practicing coding questions helps you build problem-solving speed, recognize patterns, and confidently tackle LeetCode-style challenges during real interviews.

Built for 10x Developers

No Passive Learning
Learn by building with project-based lessons and in-browser code editor
Learn by DoingLearn by Doing
Personalized Roadmaps
The platform adapts to your strengths & skills gaps as you go
Learn by DoingLearn by Doing
Future-proof Your Career
Get hands-on with in-demand skills
Learn by DoingLearn by Doing
AI Code Mentor
Write better code with AI feedback, smart debugging, and "Ask AI"
Learn by DoingLearn by Doing
Learn by DoingLearn by Doing
MAANG+ Interview Prep
AI Mock Interviews simulate every technical loop at top companies
Learn by DoingLearn by Doing