How does one do well in the coding interviews? The best results are achieved with a systematic approach:
(A) learn and review the fundamentals,
(B) work through common algorithms and their variations,
(C) do targeted practice,
(D) nail the other pieces.
What do these involve? Here is my take from my coding interviews in early 2023.
(A) How does one learn the fundamentals?
Learn the "Algorithms" from Sedgewick and Wayne. A combination of the classic book and the Coursera courses (part I and II) is perfect for building a solid foundation from scratch.
A shorter and a very applied resource is the Data Structures and Algorithms (DSA) course on Leetcode https://tinyurl.com/LEETDSA. Well worth the money.
(B) How does one source and work through common algorithms and their variations?
The aforementioned DSA course on Leetcode is truly amazing. Its text format is the best for reviewing right before the interviews. The variations of the common algorithms are mostly sourced by working through reference problems. Do write your own implementations for several reference problems per topic to have a very clear picture of how you will implement it in an interview. Figure out all decision points, e.g. recursive DFS for backtracking, BFS for shortest path, return type vs parameters for tree traversal, where and how you mark the visited graph nodes, TreeSet vs PriorityQueue usage in Java, your implementation for Tries and Disjoint Sets. Identify easy-to-implement solutions, which don't sacrifice the time complexity.
Mastery of collections API for your language of choice really helps with correctness / clarity. computeIfAbsent, merge, remove(key, value), Map.of for Maps in Java save you time and debugging headaches.
Ironically, the array-based problems can be the simplest and the hardest. Learn array-specific algorithms like dynamically changing the iteration limits (LC 1326), forward + backward pass technique (LC 42).
(C) Solve at least 2 new medium / hard problems on Leetcode every day. Read through solutions to more problems. Leetcode premium enables access to the lists of problems marked by the company. Glassdoor provides some insight into coding problems for the smaller companies. I was "lucky" with both tools. Consistency is your friend here: don't stop preparing till the day / time of your interview.
(D) The algorithm / implementation is only 50-70% of the score. Ever wondered why you wrote a working solution in 10 minutes and got poor feedback? You probably missed out on the remaining 30-50%, which includes:
- asking many clarifying questions, identifying and handling the edge cases,
- talking through your intentions and major implementation parts,
- correct time / space complexity,
- modularity = utility methods / classes, no repeated code,
- clean code = all constants defined, lines split into shorter pieces, cohesive parts split into methods (do read "Clean Code" book),
- overall near production quality code.
Last but not least, you need to enjoy it, at least somewhat! Otherwise you're going to be miserable in the process, will give up easily, and not realize your full potential.