刷题方法

警告
本文最后更新于 2023-10-31,文中内容可能已过时。

刷题方法

别人的刷题方法

GitHub - azl397985856/leetcode: LeetCode Solutions: A Record of My Problem Solving Journey.( leetcode 题解,记录自己的 leetcode 解题之路。)

第一遍按 tag 刷,第二遍一题多解,多题同解

个人建议,第一遍刷的时候可以先快速按照 tag 过一遍,快速感受一下常见数据结构和算法的套路,这样自己有一个感性的认识。

第二遍我们就不能像第一遍那样了,这个阶段我们需要多个角度思考问题,尽量做到一题多解,多题同解。我们需要对问题的本质做一些深度的理解,将来碰到类似的问题我们才能够触类旁通。

同时使用 anki 对刷过的题进行复习,坚持最重要


如果你时间比较紧迫,为了找工作而刷题,我建议你先刷热门推荐,一共两百多道题。

https://leetcode-cn.com/problemset/all/ 页面的右侧。先刷热题 HOT 100,再刷精选 TOP 面试题,之后刷其他的题。

如果你时间比较充裕,那我建议你:

  • 按从低到高的难度分组刷
  • 按 tag 分类刷
  • 定期复习,重做之前刷过的题

刷题方法:

  • 第一遍:可以先思考,之后看参考答案刷,结合其他人的题解刷。思考、总结并掌握本题的类型,思考方式,最优题解。
  • 第二遍:先思考,回忆最优解法,并与之前自己写过的解答作比对,总结问题和方法。
  • 第三遍:提升刷题速度,拿出一个题,就能够知道其考察重点,解题方法,在短时间内写出解答。

定期总结:

  • 按照题目类型进行总结:针对一类问题,总结有哪些解题方法,哪种方法是最优的,为什么。
  • 总结重点:有些题你刷了好多遍都还是不会,那就要重点关注,多思考解决方法,不断练习强

这 500+ 题不是简单的刷一遍就过去的,而是反复练习,直到代码最优,解法最优(有时候甚至觉得自己的代码精简到一个符号都无法减少的地步)。所以有时候面试官问问题,问题还没说完,我就知道应该如何表述自己的心路历程,然后慢慢地给出最优解。

而这一切的关键就在于:做笔记!

对于遇到的每个题目,事后我都做上标记:普通题目,难题、好题。此外,每个题目都分为以下几个步骤做好详细的笔记:

  1. 原题目

  2. 自己的第一遍解法

  3. 网上好的解法

  4. 自己可以改进的地方

  5. 进一步精简优化自己的代码直至代码简无可简(这是非常关键的一步,到达这一步,才会发现获得能力的提升远远要超过简单地把题目解出来

  6. 获得的思考(或者学习到的地方,可以是算法、数据结构或者 Java 的特性—例如 Stream 等等)

不断地学习别人的代码,改进自己的代码,不断地锤炼自己的代码,直至算法最优化,代码最简洁!潜移默化中,不仅对题目解法有了更深刻的理解(什么是最优解),而且也知道如何用最简洁的代码实现这个最优解。

这个方法最具参考价值


刷题要趁早

刷题入门的时候,找找身边已经刷得不错的人带一下,确定自己的节奏

目标,按照分类刷题

如果你能找到一起刷题的小伙伴,一定要组队(我就只能找群了),最好是英语小组

尽量多出去面试

如果题目不会,记得抄答案

  • 第一遍就当是熟悉题目吧,熟悉语言吧,很多题完全没思路很正常,很多算法都是很多大牛花费数年时间的研究成果,你短时间就能迅速了解的话,那么恭喜你,你应该是走在大神的路上没错了。但大部分普通人,遇到这些题目挣扎是很正常的。但抄题目不是 copy and paste。一定要理解,并定期复习自己不会的题。抄答案可以去评论区,也可以网上搜,还是理解不了的,请放 youtube 来一波。现在 Youtube 上面的中文 LeetCode 博主原来越多了。B 站应该也有,但我没去找过。大家根据自己的情况去找了。

算法面试过程中,题目类型多,数量大。大家都不可避免的会在 LeetCode 上进行训练。但问题是,题目杂,而且已经超过 1300+ 道题。全部刷完且掌握,不是一件容易的事情。那我们应该怎么办呢?

找规律,总结才是制胜法宝


  • 零基础先去学一点“数据结构“,“算法设计与分析“的课程。

  • 按题目类别集中攻克,先 easy 后 hard,同时总结套路和模板。

  • 注意时空复杂度,一题多解,一解多题。

  • 高频题可以刷第二遍。

  • 参加周赛要趁早。

建议优先按题目 tag 刷题easy » medium » hard

总结了很多常用的算法模板和套路

精刷是很有必要的。300 题刷 2 遍吃透要好过 600 题只刷一遍。

关于刷题的强度。一天一道题这种节奏很难坚持下来,也很难总结出套路和模板。有条件的一定要集中时间刷

如果你发现可以用 oi 或者 acm 的高级算法解面试题,那么多半是你想多了

周赛可以看大神的解法


https://zhuanlan.zhihu.com/p/96883783#

难度要循序渐进

按算法分类来选题

选择题目,除了在难度上要循序渐进,还建议在算法上进行划分。

基本的算法数据结构是有限的。比如说链表,二叉树,二分查找,动态规划,哈希表。。。

我喜欢按算法的分类来选题和刷题,比如一个时间段,只刷链表题,待刷得差不多的时候,接下来再刷二叉树的题。。。

解题的时候,建议按这三个步骤来

1,看懂题目

2,分析,推导解法

3,将思路转换为代码。


我的总结

每天早上一个小时的时间用来刷算法,养成习惯,让刷算法题成为自己的生活习惯。每天至少走三道题吧。

先刷完一个标签的简单难度,然后再刷下一个标签的简单难度,刷完之后再回头按标签刷中等难度,以此类推。最后刷热题 HOT 100,再刷精选 TOP 面试题,

刷完一道题,总结,然后记录到 AnKi 中,问题就是题干的概括,答案是这个问题类别(标签),解题过程中的精髓点,关键点,最优解,一定要简短,不要搞得跟完全解析一样。老是记不住的题,要反复练习。

做题之前

  1. 看懂题目

  2. 分析,推导解法,确定 tag,套模板,套规律,这一步给自己 10 分钟

  3. 将思路转换为代码

  4. 实在不会,就抄答案

做题之后,做笔记

  • 原题目

  • 自己的第一遍解法

  • (如果有提示)通过看提示来优化自己的算法

  • 网上好的解法(看题解)

  • 自己可以改进的地方

  • 进一步精简优化自己的代码直至代码简无可简(这是非常关键的一步,到达这一步,才会发现获得能力的提升远远要超过简单地把题目解出来

  • 获得的思考(或者学习到的地方,可以是算法、数据结构或者 Java 的特性—例如 Stream 等等),记录到 AnKi 中

在这个过程中,找到最优解,在这个找到最优解的过程中收获会非常大,

同时,记得找同一 tag 的题的规律,这个 tag 的题,有哪些解题方法,哪种方法是最优的,找规律,找套路,总结套路和模板,这才是刷题的目的

0%