为什么我不建议你刷题

2,002 阅读5分钟

在职一年,刷题500道,基本来回刷了3遍。碰到稍难的题目还是想不起来解法;即使写出来,多数时候会有bug;大部分题目,瞟一眼答案,我会了!自己上手写的时候半天憋不出来。小白一枚,两个月刷题400道。刷过的题老忘,二刷的时候还是不会做;刷题速度快,想不出来,一看答案就会了;坚持不下来,刷到一半不想刷了,再次刷的时候前面的又忘了。

image

为什么我不建议你刷题?恕我直言,这不是真正的刷题

不建议小白盲目刷题

如果你是小白,这里的小白指连常见的数据结构,如链表、树以及常见的算法思想,如递归、枚举、动态规划这些都没学过的,那么,我不建议你盲目急着去刷题。

因为,如果这些基础都不懂的话,看着一道题只能硬着头皮想个把小时,然后看答案也看不懂,即便你记忆好背下了答案,下次看到同样的或者变种题,还是没有任何思路,十分难受。

image

久而久之,刷题也就没动力了。所以在去诸如Lintcode等网站刷题前,你至少要先找本书学习这些必要的基础知识,包括:

1. 常见数据结构:链表、树(如二叉树)。(是的,链表和二叉树是重点,图这些可以先放着)

2. 常见算法思想:贪婪法、分治法、穷举法、动态规划,回溯法。(贪婪、穷举、分治是基础,动态规划有难度,可以先放着)

不建议单纯无脑刷题

单纯刷题是指一道题我自己能做出来,并且AC,就可以开始下一道了;或者这道题我不会,但我看了答案,然后自己码了一遍没有问题,继续下一题。

真正的刷题一定要追求完美。因为一道题的解法太多了,我们应该掌握多种解法并寻找最优的解法。也就是说,要考虑时间复杂度和空间复杂度

我做题的时候,看到一道题,可能第一想法就是用很粗糙的方式做,因为很多题可以采用暴力法解出来,就是时间复杂度很高。之后,我会反思,看看有没其他方法来降低时间复杂度或空间复杂度。最后,我会去看一下别人的做法,当然,并不是每道题都会这样执行。

因为力求给他人看懂,在反思总结的过程中,会发现之前的想法可能是错的,有时就搞懂了另一种解法,或者产生新的想法,或者明白各个解法相互之间的联系,会比仅仅 AC收获更多。

算法面试,做出来是一方面,如果能够在这个题目上掌握不同时间和空间复杂度的解法,然后再呈现给面试官,面试官自然会更加满意。

想象一下,你在面试的时候,先写时间复杂度和空间复杂度最高的方法,面试官很有可能会问有没有更优的解法;

你再写时间和空间复杂度稍微低一点的解法,面试官追问能不能再优化;

你再写出时间和空间复杂度最优的方法,这时面试官会认为你是有思考过的,你的思考是有深度的。

如果一开始就写出最优解,面试官很可能只是觉得你以前做过这道题而已。

不建议在舒适区刷题

什么叫舒适区?在刷题的时候,可能有些题型是你比较擅长的,你每次一看就有思路,然后半个小时就撸好代码,提交代码AC,哇,又多刷了一道题,开心。

前期你可以多刷些这种题练手,提升刷题乐趣。但我还是不建议你一直待在舒适区,你应该去做一些自己不擅长的题,那种一看到就觉得自己很菜、让人害怕的题。

image

跟有的人建议从hard题开始刷的道理类似,一开始的确会很难受,但慢慢地就知道了一类题的套路,做题时间也会相应缩短,这种成就感不是待在舒适区能比的。

不建议孤身埋头刷题

埋头搞题海战术,一个人跟楞头苍蝇似的跑,既没有效率,也没有结果。担心自己做不到:基础不够好,刷题进度不理想,还没有一个好的师傅带。

所以,不建议你孤身埋头刷题。



本文图片来自网络,如有侵权,请联系官方删除。

更多精彩IT求职干货:点击可阅读


欢迎关注我的微信公众号:九章算法(ninechapter)。
精英程序员交流社区,定期发布面试题、面试技巧、求职信息等

九章算法,IT教育领域的深耕者
九章算法,IT教育领域的深耕者