If input array is **sorted** then
- **Binary search**
- **Two pointers**

If asked for all **permutations/subsets** then
- **Backtracking**

If given a **tree** then
- **DFS**
- **BFS**

If given a **graph** then
- **DFS**
- **BFS**

If given a **linked list** then
- **Two pointers**

If **recursion** is **banned** then
- **Stack**

If must **solve in-place** then
- **Swap** corresponding values
- **Store** one or more different values in the **same pointer**

If asked for **maximum/minimum subarray/subset/options** then
- **Dynamic programming**
- **Sliding window**

If asked for **top/least K items** then
- **Heap**
- **QuickSelect**

If asked for **common strings** then
- **Map**
- **Trie**

Else
- Map/Set for O(1) time & O(n) space
- Sort input for O(nlogn) time and O(1) space