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

If asked for top/least K items then - Heap

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

Random Note


Amortized time is the way to express the time complexity when an algorithm has the very bad time complexity only once in a while besides the time complexity that happens most of time. Good example would be an ArrayList which is a data structure that contains an array and can be extended.