I recently got an intern offer from Google for Summer 2020. I have been practicing LeetCode problems for more than two years. Other than the LC problems, I have used the educative courses to help me prepare the coding interviews.
I found Educative: Interactive Courses for Software Developers is a great platform to learn how to do coding interviews correctly. They offered several courses for coding interviews, among others. What I like most is that they would tell you the ins and outs of these coding questions. And they break questions into different groups, patterns, as they say.
For example, in their Grokking the Coding Interview: Patterns for Coding Questions, they have patterns like:
Sliding window, to solve a group of questions like Longest Substring with K Distinct Characters (medium).
2 points to solve 3-sum problem.
Fast & Slow pattern to solve Middle of the LinkedList (easy),
LinkedList Cycle (easy).
Merge Intervals: Merge Intervals (medium).
Cyclic Sort: Find the Duplicate Number (easy).
In-place Reversal of a LinkedList: Reverse a LinkedList (easy).
Tree Breadth First Search: Binary Tree Level Order Traversal (easy).
Pattern: Tree Depth First Search: Binary Tree Path Sum (easy).
Two Heaps: Find the Median of a Number Stream (medium).
Subsets: Subsets With Duplicates (easy).
Modified Binary Search: Ceiling of a Number (medium).
Top 'K' Elements: Top 'K' Numbers (easy).
K-way merge: Merge K Sorted Lists (medium).
0/1 Knapsack (Dynamic Programming): Equal Subset Sum Partition (medium).
Topological Sort (Graph): Alien Dictionary (hard).
In their Grokking Dynamic Programming Patterns for Coding Interviews course, they break problems into:
0/1 Knapsack: Subset Sum.
Unbounded Knapsack: Coin Change.
Fibonacci Numbers: Staircase.
Palindromic Subsequence: Longest Palindromic Subsequence.
Longest Common Substring: Longest Common Subsequence, Edit Distance, among others.
Usually, the author would go through the questions and solve them with 1. Pure recursion, 2. Top-Down memoization, 3. Bottom-Up table filling techniques. This is great since we practice three ways of problem solving at a time.
I was trying grinding LeetCode for the past year, but that was kind of intimidating, since there are more than 1000 questions here now. So we need to do the preparation in a smarter and more efficient way.
The above two courses helped me the most to prepare coding interviews. Of course, you will find their System design, and OOD courses there as well.
LOTS of people recommended the System design to prepare the System Design interviews, especially for those who are looking for senior positions.
I think that the combination of educative and LeetCode is a perfect match, in order to excel at our coding interviews! As we know that the LC discussions are the best to learn from our fellow friends and coders!
Happy learning and coding!