Leetcode刷题计划

文章目录

  • 1.语言选择
  • 2. 基本知识
  • 3. 高频考题
  • 4. 如何刷题
  • 5. 题目难度选择
  • 6. 面试感受
  • 参考

1.语言选择

个人觉得选择自己最熟悉的语言即可,没有必要为了刷题专门去学一门自己不熟悉的语言。实际面试中用Python和Java刷题的人是最多的~Python优势在于比较简洁,写起来快,在面试时候时间紧迫心态紧张的情况下会节省一些时间。劣势是没有TreeMap这种数据结构,真面到这样的题会被坑(我狗家就挂在了这个上面)。注意Matlab,R等不能算IT开发的编程语言,一般面试也不允许用。

2. 基本知识

个人还是建议在正经开始大规模刷题前先把面试中最常考的知识点学明白比较重要,不然直接去刷题怕是被打击的丧失自信了…面试常见的数据结构与算法就十几项,在文章下面都有列明。

3. 高频考题

面试中算法与数据结构的重要性,可以根据自己的时间来安排,如果时间紧迫可以只准备“高频”的部分。

高频:宽度优先搜索(BFS),深度优先搜索(DFS),二分法(Binary Search),双指针(2 Pointer),堆、栈、队列、哈希表(Heap,Stack,Heap,HashMap/HashSet),前缀和(Prefix Sum),链表(LinkedList),二叉树(Binary Tree),二叉搜索树(Binary Search Tree),快速排序与归并排序(Quick Sort/ Merge Sort)

中频:动态规划(DP),扫描线(Sweep Line),字典树(Trie),并查集(Union Find),单调栈与单调队列(Monotone Stack/ Queue),TreeMap等

低频:Dijkstra,树状数组,线段树,最小生成树等…

4. 如何刷题

每个人的基础、学习习惯都不一样,以下是我个人的习惯。(注意: 我基本上每周都会花20-40小时刷题,而且我本身有朝九晚五的全职工作的,所有的业余休息时间全部用来刷题了,几乎放弃了一切娱乐活动,真-东亚做题家的即视感。)

  • 第一阶段:熟悉各个高频数据结构以及算法的原理、模版等,可以用来解决一些相关的Easy题目,这个大概花了1个月左右。

  • 第二阶段:正式开始按照门类刷题,上面标记为“高”的各个知识点题目一共刷了200题左右,又刷了50道DP题目,按照Leetcode Frequency排序,只刷高频题,每道题如果5分钟内想不出怎么解就赶紧去看答案,看懂后要能做到不看答案自己正确实现出来才可以去做下一题…这是最耗时也是最痛苦的一个阶段,第一遍刷完250题花了大概三个月左右,第二遍花了一个月,第三遍花了半个月,总之后面越刷越快,几乎可以做到一天刷十几题…

  • 第三阶段:针对面试的特殊准备,鉴于Leetcode上给了各个公司Tag下最近6个月的常见题目,我在面每家之前都会把该公司(如果Leetcode上有的话)出现过的最近6个月题目按照频率从高往低,至少把Top100 Most Frequent题目刷一遍,很多时候里面只有一半的题目是以前做过的。

  • 第四阶段:由于狗家和某些Pre IPO公司出了名的算法题难,面试狗家前一个月专门又去学了一下在“中频”当中的算法与数据结构,以防遇到了不会做,然而人算不如天算,最后还是吃了Python没有TreeMap的亏挂掉了,不过总归学了知识以后用得上。

5. 题目难度选择

大概30%Easy,60%Medium,10%Hard,Hard题目除了高频题别死磕,面试中遇到没见过的Hard题目大多数人都会挂掉的,不要太担心,把时间尽量都用来高频题上。

6. 面试感受

面第一家公司时会很紧张,看到没见过的新题时会慌乱和紧张,脑子里一直在想完蛋了准备后事吧;后面再面别家时会越来越放松,即使当时手里并没有offer,但因为题刷到位了,不管是新题旧题都有自信做出来,而且要相信自己比面试官刷的多,他未必比你的算法强。

到目前为止各个公司面试时,一共被面了30题左右,整体以Medium为主,Hard在15%左右,只有2道题出了“高频”的范围,即使遇到Hard题目也是高频题或者两三个Medium题目组合出来的Hard题。面过的题目当中大概一半的题目是刷过的原题,另一半也大部分都是现有题目的改编或者高频知识点的重新组合题,完全没见过或者一眼看上去没思路的题目只有一两道。

参考

  1. 一个大龄博士的刷题转码之路
  2. Leetcode面试高频题分类刷题总结

你可能感兴趣的:(leetcode)