刷题方法
刷题方法
别人的刷题方法
第一遍按 tag 刷,第二遍一题多解,多题同解
个人建议,第一遍刷的时候可以先快速按照 tag 过一遍,快速感受一下常见数据结构和算法的套路,这样自己有一个感性的认识。
第二遍我们就不能像第一遍那样了,这个阶段我们需要多个角度思考问题,尽量做到一题多解,多题同解。我们需要对问题的本质做一些深度的理解,将来碰到类似的问题我们才能够触类旁通。
同时使用 anki 对刷过的题进行复习,坚持最重要
如果你时间比较紧迫,为了找工作而刷题,我建议你先刷热门推荐,一共两百多道题。
在 https://leetcode-cn.com/problemset/all/ 页面的右侧。先刷热题 HOT 100,再刷精选 TOP 面试题,之后刷其他的题。
如果你时间比较充裕,那我建议你:
- 按从低到高的难度分组刷
- 按 tag 分类刷
- 定期复习,重做之前刷过的题
刷题方法:
- 第一遍:可以先思考,之后看参考答案刷,结合其他人的题解刷。思考、总结并掌握本题的类型,思考方式,最优题解。
- 第二遍:先思考,回忆最优解法,并与之前自己写过的解答作比对,总结问题和方法。
- 第三遍:提升刷题速度,拿出一个题,就能够知道其考察重点,解题方法,在短时间内写出解答。
定期总结:
- 按照题目类型进行总结:针对一类问题,总结有哪些解题方法,哪种方法是最优的,为什么。
- 总结重点:有些题你刷了好多遍都还是不会,那就要重点关注,多思考解决方法,不断练习强
这 500+ 题不是简单的刷一遍就过去的,而是反复练习,直到代码最优,解法最优(有时候甚至觉得自己的代码精简到一个符号都无法减少的地步)。所以有时候面试官问问题,问题还没说完,我就知道应该如何表述自己的心路历程,然后慢慢地给出最优解。
而这一切的关键就在于:做笔记!
对于遇到的每个题目,事后我都做上标记:普通题目,难题、好题。此外,每个题目都分为以下几个步骤做好详细的笔记:
-
原题目
-
自己的第一遍解法
-
网上好的解法
-
自己可以改进的地方
-
进一步精简优化自己的代码直至代码简无可简(这是非常关键的一步,到达这一步,才会发现获得能力的提升远远要超过简单地把题目解出来)
-
获得的思考(或者学习到的地方,可以是算法、数据结构或者 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 中,问题就是题干的概括,答案是这个问题类别(标签),解题过程中的精髓点,关键点,最优解,一定要简短,不要搞得跟完全解析一样。老是记不住的题,要反复练习。
做题之前
-
看懂题目
-
分析,推导解法,确定 tag,套模板,套规律,这一步给自己 10 分钟
-
将思路转换为代码
-
实在不会,就抄答案
做题之后,做笔记
-
原题目
-
自己的第一遍解法
-
(如果有提示)通过看提示来优化自己的算法
-
网上好的解法(看题解)
-
自己可以改进的地方
-
进一步精简优化自己的代码直至代码简无可简(这是非常关键的一步,到达这一步,才会发现获得能力的提升远远要超过简单地把题目解出来)
-
获得的思考(或者学习到的地方,可以是算法、数据结构或者 Java 的特性—例如 Stream 等等),记录到 AnKi 中
在这个过程中,找到最优解,在这个找到最优解的过程中收获会非常大,
同时,记得找同一 tag 的题的规律,这个 tag 的题,有哪些解题方法,哪种方法是最优的,找规律,找套路,总结套路和模板,这才是刷题的目的