1. Bianry search:
(1) Sorted array, but not linked-list. BS requires backtracking.Double linked-list is also not a good data structure! BS also requires randomly access every elements. Double linked-list must access each element from last (either left or right), and then this decrease the time complexity from logn to n.
(2) Two pointer: start and end. The key point of such problems is how to design the condition that jump out of the loop (start < end or start <= end). In this point, we should consider corner cases.
(3) Another point that may cause failure is that the middle index may equal to start (when start == end - 1). This may cause endless loop.
(4) A speed up way is to move index (new start or end) to the next different entry. (Ref: 3 sum)
2. Tree traversals:
(1) Recursive or non-recursive: recursive does not mean to slower than non-recursive.
(2) BFS or DFS.
(3) Pre-order, In-order or Post-order. The key to solve problems is to choose a proper method. (Post-order is better/must for recurse every pathes)
3. Graph.
4. Math:
4.1 Overflow: Use unsigned int or long long to take the number need to calculate.
4.2
5. String
6. Stack and Queue.
7. Dynamic programming.
8. Sorts.