图灵星球
课程目录 · 第 31 / 31 课
LeetCode题目讲解
  1. 1LeetCode刷题规划(精华题目列表)
  2. 219.Remove Nth Node From End of List删除链表的倒数第N个节点【LeetCode单题讲解系列】
  3. 326.Remove Duplicates from Sorted Array删除有序数组中的重复项【LeetCode单题讲解系列】
  4. 431. Next Permutation【LeetCode单题解析】
  5. 534.Find First and Last Position of Element in Sorted Array在排序数组中寻找元素的第一和最后一个位置【LeetCode单题讲解系列】
  6. 694. Binary Tree Inorder Traversal二叉树的中序遍历【LeetCode单题讲解系列】
  7. 7105. Construct Binary Tree from Preorder and Inorder Traversal【LeetCode单题解析】
  8. 8115. Distinct Subsequences【LeetCode单题解析】
  9. 9126. Word Ladder II【LeetCode单题解析】
  10. 10133. Clone Graph【LeetCode单题解析】
  11. 11144. Binary Tree Preorder Traversal 二叉树的前序遍历【单题解析系列】
  12. 12145. Binary Tree Postorder Traversal 二叉树的后序遍历【LeetCode单题讲解系列】
  13. 13206. Reverse Linked List反转链表【LeetCode单题讲解系列】
  14. 14225. Implement Stack using Queues用队列实现栈【单题解析系列】
  15. 15232. Implement Queue using Stacks用栈实现队列【单题解析系列】
  16. 16344.Reverse String反转字符串【LeetCode单题讲解系列】
  17. 17373. Find K Pairs with Smallest Sums查找和最小的k对数字【单题解析系列】
  18. 18378. Kth Smallest Element in a Sorted Matrix【LeetCode单题解析】
  19. 19399. Evaluate Division【单题解析系列】
  20. 20450. Delete Node in a BST【LeetCode单题解析】
  21. 21703.Kth Largest Element in a Stream数据流中的第K大元素【LeetCode单题讲解系列】
  22. 22704.Binary Search二分查找【LeetCode单题讲解系列】
  23. 23706. Design HashMap设计哈希映射【LeetCode单题讲解系列】
  24. 24739. Daily Temperatures 每日温度【LeetCode单题讲解系列】
  25. 25841.Keys and Rooms钥匙和房间【LeetCode单题讲解系列】
  26. 26875. Koko Eating Bananas科科吃香蕉【LeetCode单题解析】
  27. 27876.Middle of the Linked List 链表的中间结点【LeetCode单题讲解系列】
  28. 28994.Rotting Oranges 腐烂的橙子【LeetCode单题讲解系列】
  29. 291055. Shortest Way to Form String【LeetCode单题解析】
  30. 301123. Lowest Common Ancestor of Deepest Leaves【LeetCode单题解析】
  31. 31LeetCode题库过千,改如何规划刷题?【刷题规划系列】

LeetCode题库过千,改如何规划刷题?【刷题规划系列】

第 31 课 / 共 31 课Leetcode题目讲解

视频打不开?·在 YouTube 打开 ↗

如今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 分钟没思路直接看答案就好了。

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

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