Go over basic data structures and algorithms. At the same time pick up the missing parts of C++, and other languages. GPU? Networking? ML?
The order of learning is to follow basic data structures and common algorithms based on them, and to implement the solutions of LeetCode questions in C++ and other languages.
chapter | content |
---|---|
01-hello | hello |
02-array | array |
03-linked list | linked-list |
04-hash table | hash table |
05-string | string |
06-double-pointer | double-pointer |
07-stack and queue | stack and queue |
08-binary tree | binary tree |
09-back tracking | back tracking |
10-greedy algorithm | greedy |
11-dynamic programming | DP |
12-monotonic stack | monotonic stack |
13-graph | graph |
Array, stack, heap/queue, priority queue, deque and so on are linear structures with special and limited access to their elements. The linked list is logically linear and physically non-linear. Then binary trees and graphs become even more nonlinear. Both array and linked list are basics.
Then hashing, two-pointer, sliding window, binary search are clever with specific conditions to apply. DFS, BFS, backtracking, DP, greedy are just general ideas to deal with specific problems, somwhere they are very close to brute force that is the strength of computers.
The idea of recursion in algorithms is very powerful. Together with iteration, both are different traversal approaches. For recursion, go from head to tail or reversely. This is also a string point of computer.
Other topics like tries, knapsack, intervals, bit-manipulation, math and geomotry are more specific.