interview - Coding patterns

Abstract

A collection of coding patterns we can encounter during coding interviews. The author argues we don’t need to do all the LeetCode problems, we “only” need to find the patterns so we can be flexible the D day.

Coding Interviews are getting harder. To prepare for coding interviews, you will need weeks, if not months of preparation.

No one really likes spending that much time preparing for the coding interviews. So is there a smarter solution?

First, let’s look at the problem.

Anyone preparing for coding interviews definitely knows LeetCode. It is probably the biggest online repository for coding interview questions. Let’s take a look at what problems people face when using LeetCode.

Problems with leetcode

There are more than 2k problems in LeetCode. The biggest challenge with LeetCode is its lack of organization; it has a huge set of coding problems, and one isn’t sure where to start or what to focus on.

One wonders, is there an adequate number of questions one should go through to consider themselves prepared for the coding interview?

I would love to see a streamlined process that guides me and teaches me enough algorithmic techniques to feel confident for the interview. As a lazy person myself, I wouldn’t like to go through 500+ questions.

The Solution

One technique that people often follow is to solve questions related to the same data structure; for example, focusing on questions related to Arrays, then LinkedList, HashMap, Heap, Tree, or Trie, etc. Although this does provide some organization, it still lacks coherence. For example, many questions can be solved using HashMaps but still require different algorithmic techniques.

I would love to see question sets that follow not only the same data structure but also similar algorithmic techniques.

The best thing I came across was the problem-solving patterns like Sliding Window, Fast and Slow Pointers, Topological Sort, etc. Following these patterns helped me nurture my ability to ‘map a new problem to an already known problem’. This not only made this whole coding-interview-preparation process fun but also a lot more organized.

Coding patterns enhance our “ability to map a new problem to an already known problem.”

Coding Patterns

I have gathered around 20 of these coding problem patterns that I believe can help anyone learn these beautiful algorithmic techniques and make a real difference in the coding interviews.

The idea behind these patterns is that once you’re familiar with a pattern, you’ll be able to solve dozens of problems with it. For a detailed discussion of these patterns and related problems with solutions, take a look at Grokking the Coding Interview.

Sliding Window

interview - coding patterns - sliding window

500

Islands - Matrix traversal

500

Two pointers

interview - coding patterns - two pointers

500

Fast and slow pointers

500

Merge intervals

500

Cyclic sort

500

In-place reversal of a LinkedList

500

interview - coding patterns - breadth first search

500

interview - coding patterns - depth first search

500

Two heaps

500

Subsets

500

500

Bitwise XOR

500

Top K elements

500

K-way merge

500

Topological sort

500

0/1 Knapsack

500

Fibonacci numbers

500

Palindromic subsequence

500

Longest common substring

500

Conclusion

Like it or not, LeetCode-type questions are part of almost every programming interview, so every software developer should practice them before an interview. Their only option is to prepare smartly and learn problem-solving by focusing on the underlying problem patterns. Learn more about these patterns and sample problems in Grokking the Coding Interview and Grokking Dynamic Programming for Coding Interviews.

Check Design Gurus for some interesting courses on Coding and System Design interviews.