首先说一句:

首先说一句:
以现有市面的资源来看,没有任何一本书能概括的了 LC 的题目。
因为LC需要的基础,实在是太广了,以最基本的来论,科班出身必学的两门课《数据结构》《算法分析》,能够覆盖到70%左右,但也仅限于此不能再多了。
简单给大家说一下我们需要知道的基础:

1,数据结构

数据结构(低级的):数组,链表,栈,队列,树,图,堆,HashTable等
数据结构(高级的,本科基本学不到):线段树,树状数组,并查集,字典树等

2,算法

算法(低级的):排序算法(八种),DFS,BFS,二分查找,回溯,分治,递归,动态规划,拓扑排序,贪心等
算法(学校学不到的):Sliding window,扫描线算法(图形学),蓄水池算法,flood fill(图形学)等
更难的其实也涉及到很多:KMP,马拉车等

3,其他知识

这还仅仅是算法和数据结构,那么还有别的知识:
位运算(Bit),基础数据结构实现(LinkedList Deque等实现),一些设计思想(Design),数学知识(Math),通配符,转义字符,记忆化搜索等。
如果用的是Java,其实别的语言也一样,Java 还有一些常用的数据结构:
TreeMap,TreeSet,PriorityQueue,Deque 等

以上我说的所有东西,全部都是Leetcode题目出现过的。

那么多说一点,如果是针对面试,有很多都是北美的,Google Facebook这种公司,会的还要更多:
Dijkstra,二分图,红黑树知识等;
Java的基础:Heap实现,HashMap,HashSet具体区别等,equals hashcode重写等
这些东西一样,都是曾经在面试中大量出现的,就是我们要会的基础。
所以东西非常多,那么怎么刷题呢,我把我之前写的答案复制了过来,给大家看看:

刷题第一步,就是了解所有的数据结构,做题方法,基础算法。从基础数据结构HashMap,HashSet,到TreeSet,TreeMap,Deque,LinkedHashMap;到各种对刷题来说的基础算法,各种排序算法,DFS,BFS,Sliding Window,sweep line,等等。99%的人这些都没有学过,就直接做题,做两道就想类似的题自己能做出来。 如果刷题这么容易,那人人都能进Facebook,Google了。 不可能的。我告诉我学生的方法,第一遍就是看答案。在第一遍刷题的时候,很多题其实是一类方法,但自己做的时候并不知道,然后自己做不出来就感觉挫败,其实是方法不对。所以在第一遍的时候,就是在看答案,最优解,去知道什么是刷题,理解所有的算法,原理,套路。建立一个较为完整的刷题思维体系。这样才能在遇见不会的题,想法思路才能正,才能有感觉最优解的方向,否则想一上来做几个题自己就知道最优解了,不可能的。 这里多说两句。很多人反对第一遍刷题看答案,认为就是自己做。当年我第一遍刷题的时候,举几个例子。 LC 76 怎么想都想不到,看答案感觉这解法真厉害,做多了才发现,有一种方法叫Sliding Window。 LC 56,看了答案才知道,还有个扫描线算法。之前想了那么多,都是错误的方向。 LC 200,看似简单的dfs,bfs,最后才知道flood fill。。。 LC 215,quick select 这种情况我相信每个人都遇见过,还有数据结构不好时,TreeMap都不知道是啥,PriorityQueue也不知道怎么用,LinkedHashMap,没听过。 所以现在回想起来当年第一遍刷,感觉费了那么多时间想这些,真的是浪费时间,因为想题想思路是重要的,但不应该把时间花在想的是这些已有的固定方法数据结构上,如果做这道题之前就知道了数据结构,知道了算法,那么我至少应该有个想的方向。即使想错了,也能说,啊,这个问题应该用sliding window啊,而不是发现,哎,还有个这样的方法!还有这种数据结构叫TreeMap! 就像学数学,知道1,2,3,不知道4,5,6,那怎么能算出2+5呢? 至少也应该把10个数认全再算加减乘除吧! 所以我认为浪费时间在这个补基础的点,不值。 与其这样,还不如第一遍就看答案,以题带练,带补,学习人家的最优解,建立思维体系,补数据结构,补算法知识。而第二遍时,才是真正自己想。这样做,一点不耽误锻炼思维过程,锻炼逻辑基础。这是我刷了这么多题感悟到能最快刷题的方法,现阶段我认为没有之一。 而第二遍就是要自己想了,第一遍已经有了思维,现在就是要培养自己的做题能力了。很多题第二遍看感觉自己以前没做过,正常,没人能一遍记住。但这遍就需要自己先写答案,因为你很多已经有了大体的方向感和目标,自己多多少少能写出来一些。然后这边尝试自己写,加深印象。 第三遍就是再过一下,再熟练所有套路,就需要牢牢记住。第四遍我认为需要脱离lc,需要做面经了,看看公司面试是怎么出题的。如果你的目标是北美找工作的话。 另外不建议刷800,主刷前400,就够用了,毕竟,前400能刷完的,理解的了的,10中2-3个人而已。 其实这些东西说起来容易,做起来很难。 每一遍其实都挺痛苦的,需要一个循序渐进的过程。我不是什么天才,我到现在的水平,基本上全职刷题,上课只是副业,8-9个月的时间。以数量来看,留学两年多,刷题过3000。不重复的题,就做过过千了。后来我把lc前400题所有题解法录成视频,录了近半年。所以不是看到一个人刷题厉害怎么聪明,而是踏踏实实的努力。 毕竟最快的捷径,就是没有捷径。

最后做个小广告:
Leetcode 分类顺序表:cspiration.com/leetcodeClassification(国内要翻墙)
LeetCode 前400题所有题目视频讲解:CS Future
算法基础知识 + 题型技巧讲解:CS Future
个人微信号:cspiration(加我我会拉你到北美cs群)
微信公众号:cspiration
关于Leetcode的问题,我回答了特别多,如果有其他问题可以看看我其他的回答,每一个我都非常认真的写。宣传我自己的东西是一方面,我也真心希望这些回答能够真的帮助到大家,谢谢大家。