The top 20 coding patterns enhance our “ability to map a new problem to an already known problem.”

Here are the 20 coding patterns:

**1. Sliding Window: **

This algorithmic technique is used when handling the input data in a specific window size.

**2. Islands (Matrix Traversal)**

This pattern describes all the efficient ways of traversing a matrix (or 2D array).

**3. Two Pointers**

This technique uses two pointers to iterate input data. Generally, both pointers move in the opposite direction at a constant interval.

**4. Fast & Slow Pointers**

Also known as Hare & Tortoise algorithm. This technique uses two pointers that traverse the input data at different speeds.

**5. Merge Intervals**

This technique is used to deal with overlapping intervals.

**6. Cyclic Sort**

Use this technique to solve array problems where the input data lies within a fixed range.

**7. In-place Reversal of a LinkedList**

This technique describes an efficient way to reverse the links between a set of nodes of a LinkedList. Often, the constraint is that we need to do this in place, i.e., using the existing node objects without using extra memory.

**8. Tree Breadth-First Search**

This technique solves problems involving traversing trees or graphs in a breadth-first search manner.

**9. Tree Depth First Search**

This technique solves problems involving traversing trees or graphs in a depth-first search manner.

**10. Two Heaps**

In many problems, we are given a set of elements that can be divided into two parts. We are interested in knowing the smallest element in one part and the biggest element in the other part. As the name suggests, this technique uses a Min-Heap to find the smallest element and a Max-Heap to find the biggest element.

**11. Subsets**

Use this technique when the problem asks to deal with permutations or combinations of a set of elements.

**12. Modified Binary Search**

Use this technique to search a sorted set of elements efficiently.

**13. Bitwise XOR**

This technique uses the XOR operator to manipulate bits to solve problems.

**14. Top ‘K’ Elements**

This technique is used to find the top/smallest/frequently occurring 1K’ elements in a set.

**15. K-way Merge**

This technique helps us solve problems that involve a list of sorted arrays.

**16. Topological Sort**

Use this technique to find a linear ordering of elements that have dependencies on each other.

**17. Unbounded Knapsack**

This technique is used to solve optimization problems. Use this technique to select elements that give maximum profit from a given set with a limitation on capacity and that each element can only be picked once.

**18. Fibonacci Numbers**

Use this technique to solve problems that follow the Fibonacci numbers sequence, i.e., every subsequent number is calculated from the last few numbers.

**19. Palindromic Subsequence**

This technique is used to solve optimization problems related to palindromic sequences or strings.

**20. Longest Common Substring**

Use this technique to find the optimal part of a string/sequence or set of strings/sequences.