- 首先刷题贵在坚持,每天训练 保持头脑 + 回顾多想——即刻畅通.
- 不能为了刷题而刷题,要结合实际的理论\面试[应用] 知识去刷题.
- 并且时常总结、时常回顾.
刷题顺序
leetcode上刷刷题(多刷easy和middle难度的)
- Array
- String
- Math
- Tree
- Backtracking
- Dynamic Programming
- LinkedList
- Binary Search
- Matrix
- DFS & BFS
- Stack & PriorityQueue
- Bit Manipulation
- Topological Sort
- Random
- Graph
- Union Find
- Trie
- Design
参考->Leetcode分类顺序表
应该掌握三点
数据结构
-
数据结构(低级的):数组,链表,栈,队列,树,图,堆,HashTable等
-
数据结构(高级的,本科基本学不到):线段树,树状数组,并查集,字典树等
算法
- 算法(低级的):排序算法(八种),DFS,BFS,二分查找,回溯,分治,递归,动态规划,拓扑排序,贪心等
- 算法(学校学不到的):Sliding window,扫描线算法(图形学),蓄水池算法,flood fill(图形学)等
- 更难的其实也涉及到很多:KMP,马拉车等
其他知识
这还仅仅是算法和数据结构,那么还有别的知识:位运算(Bit),基础数据结构实现(LinkedList Deque等实现),一些设计思想(Design),数学知识(Math),通配符,转义字符,记忆化搜索等。
如果用的是Java,其实别的语言也一样,Java 还有一些常用的数据结构:TreeMap,TreeSet,PriorityQueue,Deque 等
以上说的所有东西,全部都是Leetcode题目出现过的。那么多说一点,如果是针对面试,有很多都是北美的,Google Facebook这种公司,会的还要更多:Dijkstra,二分图,红黑树知识等;Java的基础:Heap实现,HashMap,HashSet具体区别等,equals hashcode重写等这些东西一样,都是曾经在面试中大量出现的,就是我们要会的基础。
所以 我们要在扎实学习这些基础之上。进行面经的不断精进!直至找到理想的工作!
The connect dots will lead you to the Bright Future.
刷题技巧
另外不建议刷lc 800,主刷前400,就够用了,毕竟,前400能刷完的,理解的了的,10中2-3个人而已。
第一遍
可以看看答案,学习人家的最优解,建立思维体系,补数据结构,补算法知识。
第二遍
有了刷题的知识体系和思维导图。开始培养自己 运用这种体系、算法,去分析问题、解决问题了。
第三遍
再过一下,熟悉下所有套路。这时候应该牢牢记住了 所有套路或者形成了自己的算法模板。
第四遍
脱离lc,开始做 面经,看看公司面试时怎么出题的!
建议
腾出固定时间
每天早晨或者中午早来一会——【刷题】
每周六下午 【总结】 + 【回顾】
在线编写
尽量在线编写,避免使用相应的IDE.一方面锻炼代码能力;另一方面 养成良好的代码风格。
总结
引用知乎博主 Edward Shi 关于 刷 leetcode 需要哪些基础? 的回答
另外不建议刷800,主刷前400,就够用了,毕竟,前400能刷完的,理解的了的,10中2-3个人而已。
其实这些东西说起来容易,做起来很难。 每一遍其实都挺痛苦的,需要一个循序渐进的过程。我不是什么天才,我到现在的水平,基本上全职刷题,上课只是副业,8-9个月的时间。以数量来看,留学两年多,刷题过3000。不重复的题,就做过过千了。后来我把lc前400题所有题解法录成视频,录了近半年。所以不是看到一个人刷题厉害怎么聪明,而是踏踏实实的努力。毕竟最快的捷径,就是没有捷径。
博主后话
- 实际做算法应聘,或者算法醒目落地。数据远比模型重要,工程稳定流畅的难度远大于某几个指标几个点的提升(
除非提升很多,当我没说)所以俗话说,算法工程师 先是工程师,再试算法工程师。 - 想做算法,coding能力一定要跟上
- 但是“诸神黄昏”到来,算法岗位越来越饱和,反而 研发岗位挺多、而且工资有逐渐提升靠近 算法岗位的趋势,所以有想法的小伙伴 要慎重。