If you are participating in any Coding Competitions or preparing for Coding interviews, or just practicing Coding problems on any coding platform and want to save some time in thinking of an efficient approach after seeing the coding question, then you are at the right place.

Below is a simple and easy-to-understand yet useful guide on what approach to take when you first see a certain type of problem. Of course, this is not relevant every time, but most of the time, this really works.

Consider the below instructions as a conclusion after solving more than a thousand of a variety of coding problems online.

So, here it goes:

**If the input array is sorted then try using:**

- Binary search
- Two pointers

**If you must solve in-place then try using:**

- Swap corresponding values
- Store one or more different values in the same pointer
- Check if it is written in questions like "Inplace excluding input and output variables". If it is so, then try to use the resultant variable. For example, using a resultant array like a map

**If asked for all permutations/subsets then try using:**

- Backtracking

**If given a tree or graph then try using:**

- DFS
- BFS

**If given a linked list then try using:**

- Two-way
**pointers** - Faster and Slower pointer

**If recursion is banned then try:**

- Use Array as Stack

**If asked for maximum/minimum of subarray/subset then try using:**

- Dynamic programming

**I asked for top/bottom/least K items then try using:**

- Heap

**If asked for common strings then try using:**

- Map
- Trie

**If optimization is needed in the case of string/arrays then try:**

- Map/Set as it has O(1) time & O(n) space
- Try to sort input for O(N log N) time and O(1) space

Hope this helps. Also please don't forget to comment on any other tips you want to add to this guide. Thank you.