A lot of problems involve advanced algorithms and require extensive reading/training. This is beyond the scope of this notes. Instead, I will only deal with regular coding work that you have to do everyday. It doesnt have to be super optimized, but runs reasonably fast, uses memory wisely, and is certainly towards bug-free. A few topics that come off my mind: searching, sorting, dynamic programming, streaming alrogithms and some machine learning/data mining topics.
- variation: select top k
- Hash Table
- Binary Tree
- Binary Search Tree
- delete: no child. 1 child. two children: find successor with at most 1 child. replace.
- find successor. if right(x): return leftmost(right(x)). else if x = leftchild(parent(x)), return parent(x). else x = parent(x), recur.