切换视频源:

如今LeetCode题库已经过千,很多同学可能还没刷就已经知难而退了,但是不用怕!戴瑞和我出了一份精华题目列表,其中涵盖了各类题型中的精华题目,可以帮助大家更好地进行刷题规划,让刷题效率事半功倍。

但在大家使用这份列表之前,请先将接下来提到的几个要点了解清楚,才能更有效地使用刷题列表。

算法题到底在考察什么?

我们知道科技公司是通过算法题的形式来面试员工,但是为什么偏偏是“算法题”呢?

因为算法题很考验我们解决问题的能力,何出此言?在算法面试中,往往就是丢给你一道题目,你要对题目中的条件进行分析和判断,有思路之后,再套用特定的算法来解题。

这是不是和我们学物理和数学的时候很像?学一些公式,然后去解题,思维能力比较强的同学就能在遇到不同题目时,根据题中不同的条件,将已知公式进行灵活套用,解决各种场景中的实际问题。

这也是为什么科技公司采取算法题来筛选员工,因为算法题就像物理和数学题一样,能够很好地考察我们是否能对基础知识进行灵活应用,解决不同场景中的实际问题。在真正的面试中,交流之类的软实力也同样重要,但不要忘记算法题最核心的考察点是解决问题的能力。

而这种能力是可以被训练出来的,How?想一想在物理和数学题中,解题的基础是什么?没错,就是公式!如果没掌握公式,肯定是无法解题的。而算法模板就是算法题中的基础公式,没掌握这些基础,面试的时候即使有思路,想要当场解出来基本是不可能的。

而所谓的算法基础到底是什么呢?我们接下来就来讨论一下刷题前需要掌握的三大基本功。

刷题前必备的三大基本功

以下是刷题前必备的三大基本功:编程语言,数据结构和算法,特定算法套路。

这些内容看起来很多,但是好消息是我们已经在图灵星球为大家铺平了道路,出了三个所对应的系列。

关于编程语言,我就不赘述了,毕竟编程语言是刷题最基础的工具。这里稍微提一嘴的是,我建议大家学Java,因为 Java 是 Object-Oriented 语言,强行培养 OOP 思维,而这种编程思维是编程岗位必备的能力,能够培养我们开发软件的大局观。虽然 Python 也支持 OOP,但 Java 是强制性的,通过学习 Java 更能培养出这种思维。而且 Java 相关的工作岗位很多,学习 Java 也可以帮助我们更好地就业。

“数据结构和算法”是学习特定算法前的基础,比如时间空间复杂度,如何实现 List、HashMap、Tree、Heap、Graph,还有各类数据结构中的操作,都是必备的基本功。

第三个基本功就是“特定算法套路”,这个系列主要是讲解一些常见算法的模板,只有掌握这些套路后再去刷题,才能达到事半功倍的效果。为什么算法套路这么重要呢?因为不用的算法在特定的题型中需要不用的处理方式,比如双指针题目分为同向指针和反向指针,动态规划(DP)题目分一维和二维的解法,甚至是很简单的 Binary Search,不同的 Corner Case 也需要采取不同的方式去处理,而这些都是有模板的!如果没有经过系统性的学习,很容易就会出现有思路,但是写着写着就卡住,Debug半天都没有进展的窘境。

虽然这些内容看起来很多,但我们已经在每个系列中将最重要的知识点提炼出来了,大家一步一脚印,打好基础才更重要。以诺当年在刷题路上也是一路坎坷,没有领路人真的很辛苦,所以我们创建这些系列的初心,就是为了给小伙伴提供真正的一站式服务,避免大家走弯路。

改如何规划刷题?

聊完三大基本功,我们来讲一下这章的重点:如何通过刷更多的 LeetCode 算法题,帮助我们巩固和加强算法,有效性地提升解题能力。关于刷题规划,其实我们只要解决以下两个问题就好了:我要全刷吗?我改怎么刷?

我要全刷吗?

LeetCode题库过千,我要全刷吗?本章一开始我就提到了算法题考察是什么能力?是我们是否能灵活使用算法,解决实际问题的能力。所以算法题的考察点是解决问题的能力,而不是记忆力,只要能够对算法融汇贯通,就能碾压算法面试。

过千道的 LeetCode 题目肯定不需要全刷,但也不能乱刷,如何选题还是很重要的。如果简单地按照 Easy、Medium、Hard分类不够系统,刷到后期也无法进行针对性的强化训练。根据LeetCode的Tag来刷也不推荐,因为LeetCode Tag分得不够细致,有些题目的分类是非常牵强的,不够系统。

那戴瑞和我整理出了一份精华题目列表。列表中的题目根据不同模块进行分类,尽可能地将各类重要的题型都涉及到。在每个版块中,我们也用不同颜色将难度标记了出来。想要看到这个列表,直接登入点击这个链接,就能看到列表的最新版本。

我们接下来也会根据列表中的题目,出单题解析的视频,这样大家刷题没思路的时候,就能直接看解析视频,帮大家在刷题上省时、省力。

我改怎么刷?

有了这个列表,“我改如何刷?”这个问题就能被转化成“我改如何使用这份列表”了哈哈。

大家可以从两个维度进行评估,第一个就是评估自己的能力,第二个是自己的准备时间。

能力分三个级别:零基础、有基础、和基础扎实。在你升到 Level 3 基础扎实之前,我都不建议使用精华题目列表刷题。我先来解释一下这三个级别是什么意思?那其实对应的就是我们的三大基本功。

  • Level 1 “零基础”代表你不会任何编程语言:variable 是什么? function 和 class 是什么都不理解。我的建议是先学习一门编程语言,不管是 Java 还是 Python,先掌握刷题的基本工具。
  • Level 2 “有基础”指的是你能熟悉使用一门编程语言,并了解数据结构和算法的知识,还能使用你掌握的编程语言实现常用的数据结构和算法(Heap、HashMap、BFS、DFS等等),如果还不能达到这种程度的话,建议复习一下“数据结构和算法”系列,把算法的基础知识打牢。
  • Level 3 “基础扎实”指的是对常见算法比较敏感,比如了解 Binary Search,Two Pointers 的不同种类,各种 Search: BFS, DFS, Best-First Search,一维二维的DP,如果对这些常见的知识点都有概念,就是“基础扎实”。

明白了自己的等级后,然后再根据面试的准备时间采取不同的策略:

  • 如果准备时间在2~6个月,把自己从Level 1升到Level 3就可以了,在Level 2 过度到 Level 3时,可以使用“LeetCode算法套路系列”学习特定的算法,并在结束每章的学习之后,选择列表中相对应的Section进行算法巩固。
  • 对于面试时间比较充裕的 ( >= 6个月),建议到 Level 3之后,从列表中的不同Section中选择难题来检验自己的能力,再根据薄弱的部分进行针对性训练,冲刺FLAG级别的公司。比如Google就很喜欢Graph和DP的题目,大家可以最后专攻一下。
  • 对于马上面试的(<= 2个月),没时间按部就班,好好打基础的朋友,我们也会尽快出一些关于面试前冲刺的特辑,请大家敬请期待。但最好还是打好基础,真正地提高算法能力,才是长久之计。

不要死磕!

这边要提醒大家的是,碰到实在不会的题目,一定不要死磕。一道算法题到手,如果 5 ~ 10 分钟内还没有思路,直接看“单题解析”,不要浪费时间。因为一些算法题会涉及到特定的算法,你如果没学过,想破脑袋也做不出来!刷题是为了应用我们已掌握的算法,而不是去创造新算法,所以 5 ~ 10 分钟没思路直接看答案就好了。

我这边还要提醒的是,没有特殊情况,在掌握三大基本功之前,不要使用精华题目列表刷题。因为你一旦看了题目和解析视频,大脑就会对题目有印象,下次刷就会不自觉地回忆答案,影响解题的思路。有些题目你刷多了,可能就背下来了,我们列表中的题目都是精华重点题,可以用来很好地检验我们的算法能力,大家在掌握基础前千万不要去浪费题目。

最后也祝大家在找工作的路上一帆风顺,大吉大利哈哈。如果希望能在社群中和我们进行更多的讨论和互动,也欢迎关注我们的公众号获取社群的链接,我们会在刷题交流群中不定期发送“好题”,推送求职动态,同时不定期组织线上的答疑解惑,并收集大家的意见和反馈,帮助我们做出更优质的内容。欢迎正在刷题的小伙伴积极加入!