在职一年,刷题500道,基原本回刷了3遍。碰到稍难的题目仍是想不起来解法;即便写出来,多数时候会有bug;大部分题目,瞟一眼答案,我会了!本身上手写的时候半天憋不出来。小白一枚,两个月刷题400道。刷过的题老忘,二刷的时候仍是不会作;刷题速度快,想不出来,一看答案就会了;坚持不下来,刷到一半不想刷了,再次刷的时候前面的又忘了。程序员
为何我不建议你刷题?恕我直言,这不是真正的刷题。面试
若是你是小白,这里的小白指连常见的数据结构,如链表、树以及常见的算法思想,如递归、枚举、动态规划这些都没学过的,那么,我不建议你盲目急着去刷题。算法
由于,若是这些基础都不懂的话,看着一道题只能硬着头皮想个把小时,而后看答案也看不懂,即使你记忆好背下了答案,下次看到一样的或者变种题,仍是没有任何思路,十分难受。微信
长此以往,刷题也就没动力了。因此在去诸如Lintcode等网站刷题前,你至少要先找本书学习这些必要的基础知识,包括:网络
1. 常见数据结构:链表、树(如二叉树)。(是的,链表和二叉树是重点,图这些能够先放着)数据结构
2. 常见算法思想:贪婪法、分治法、穷举法、动态规划,回溯法。(贪婪、穷举、分治是基础,动态规划有难度,能够先放着)学习
单纯刷题是指一道题我本身能作出来,而且AC,就能够开始下一道了;或者这道题我不会,但我看了答案,而后本身码了一遍没有问题,继续下一题。优化
真正的刷题必定要追求完美。由于一道题的解法太多了,咱们应该掌握多种解法并寻找最优的解法。也就是说,要考虑时间复杂度和空间复杂度。网站
我作题的时候,看到一道题,可能第一想法就是用很粗糙的方式作,由于不少题能够采用暴力法解出来,就是时间复杂度很高。以后,我会反思,看看有没其余方法来下降时间复杂度或空间复杂度。最后,我会去看一下别人的作法,固然,并非每道题都会这样执行。code
由于力求给他人看懂,在反思总结的过程当中,会发现以前的想法多是错的,有时就搞懂了另外一种解法,或者产生新的想法,或者明白各个解法相互之间的联系,会比仅仅 AC收获更多。
算法面试,作出来是一方面,若是可以在这个题目上掌握不一样时间和空间复杂度的解法,而后再呈现给面试官,面试官天然会更加满意。
想象一下,你在面试的时候,先写时间复杂度和空间复杂度最高的方法,面试官颇有可能会问有没有更优的解法;
你再写时间和空间复杂度稍微低一点的解法,面试官追问能不能再优化;
你再写出时间和空间复杂度最优的方法,这时面试官会认为你是有思考过的,你的思考是有深度的。
若是一开始就写出最优解,面试官极可能只是以为你之前作过这道题而已。
什么叫温馨区?在刷题的时候,可能有些题型是你比较擅长的,你每次一看就有思路,而后半个小时就撸好代码,提交代码AC,哇,又多刷了一道题,开心。
前期你能够多刷些这种题练手,提高刷题乐趣。但我仍是不建议你一直待在温馨区,你应该去作一些本身不擅长的题,那种一看到就以为本身很菜、让人惧怕的题。
跟有的人建议从hard题开始刷的道理相似,一开始的确会很难受,但慢慢地就知道了一类题的套路,作题时间也会相应缩短,这种成就感不是待在温馨区能比的。
埋头搞题海战术,一我的跟楞头苍蝇似的跑,既没有效率,也没有结果。担忧本身作不到:基础不够好,刷题进度不理想,尚未一个好的师傅带。
因此,不建议你孤身埋头刷题。
更多精彩IT求职干货:点击可阅读