To begin with：
With the existing resources on the market, there is no single book that can summarize the topic of LC.
Because the need for the foundation of LC is too broad, science class must learn the two courses: "data structures" and "algorithm analysis," It can cover about 70%, but not much more than that.
Simply give you the basics of what we need to know：
1. data structures
Data structures (low-level): arrays, chains, stacks, queues, trees, graphs, heaps, HashTables, etc.
Data structures (high-level, the basic undergraduate can not learn): line tree, tree array, and union-find sets, dictionary tree, etc.
Algorithms (low-level): sorting algorithms (eight kinds), DFS, BFS, binary search, backtrack, Divide and Conquer, recursion, dynamic planning, topological sorting, greedy, etc.
Algorithms ( that cannot be learned in school ): Sliding window, scan line algorithm ( graphics ), Reservoir Sampling, flood fill ( graphics ), etc.
The more difficult ones actually involve a lot: KMP, horse-drawn carriage, etc.
3. other knowledge
This is just the algorithms and data structures, then there are other knowledge.
Bit operation (Bit), basic data structure implementation (LinkedList Deque and other implementations), some design ideas (Design), mathematical knowledge (Math), wildcard character, escape characters, The Triangle, etc..
If you are using Java, actually other languages as well, Java also has some common data structures:
TreeMap, TreeSet, PriorityQueue, Deque, etc.
All the things I mentioned above are all appeared in the Leetcode questions.
To say one more point then, if it is for the interview, there are many are North American, such companies as Google Facebook, will be more:
the Dijkstra, bipartite graph, red-black tree knowledge, etc.