我是大二的时候开始接触LeetCode的,那时候lc只有400题,我本来打算每天做一个题,但是由于当时觉得题目太难没坚持下去。在大四考研后和研一研二的两年左右的时间,我刷了700多道题。那么我是怎么做到的呢?
我打算分为两个部分来讲:入门篇、提高篇。
刚开刷lc时遇到二叉树翻转题目,想了一天也没明白,当时无比痛苦。因为我的方法不对,我总想着自己在脑子里面想明白再写,还想着用本地IDE写个二叉树结构进行debug,现在看来都是走了弯路。
对于新人而言,不应该自己硬扣一个题目,如果想了一会没有任何思路,就应该果断看别人怎么写的。在理解了别人的做法之后,再凭理解和记忆在LeetCode的代码框里敲一遍。
就像每个课本都会有例题一样,只学纯知识大家都不知道怎么运用的。而我们在刷LeetCode的时候并没有例题可以给我们学习,因此新手会感到痛苦。新手不要害怕看别人的解法和答案,度过痛苦时期,后面就会越刷越快。
新手应该注重三个方面:基础知识、跟别人学习、做好笔记 。
需要掌握常用的数据结构和算法的思想和适用场景。
我推荐《算法第4版》,看这个书的时候不用全部看,只看重点,比如前面的Java知识不用看,数学推导不用看。再推荐一本侯捷的《STL源码剖析》,这本书对理解C++ STL有重大帮助,看了之后绝对会对数据结构和算法有更深的理解,我看完这本书之后感觉相见恨晚啊。
向别人学习是非常必要的。
又分为两种:
主要看别人在解决这个题目的思路是什么。
推荐的题解作者有:
花花酱:基本每个题都有博客和视频,强烈推荐看他的视频。
负雪明烛:把重点放在分析上,每篇质量都很高。
Grandyang:通过举例子来让你明白该怎么做。
李威威,甜姨,柳婼,书影博客。
题解区的答案:英文版看lee215,中文版看liweiwei和sweetie,以及官方解答。
如果你会做这个题目,我也觉得应该看下别人怎么解决的,思路是不是一样。
比如想看负雪明烛的two sum题解,那么搜索方式就是加上fuxuemingzhu在后面搜:
这部分包括算法讲解、套路整理、刷题模板等。
负雪明烛说:”做题 = 想法 + 模板“,想法需要通过看别人的解答以及讲解获得,模板就是做题的套路和模板,既可以自己总结,也可以看别人总结好的。
首先是labuladong的算法小抄,在Github上两周就获得了 10k star!!!强烈推荐,特别是动态规划不懂的,可以看。
然后有负雪明烛的【LeetCode】代码模板,刷题必会,基本总结了所有的做题模板。
在很多年前我就开始把每个做过的题目记录在CSDN上,现在我的博客浏览量已经将近100万了。
我的做法是:任何题,无论难度,我都进行记录题目、想法、代码。虽然经常写博客的时间比写题的时间还多,但是把自己的想法讲解一遍才是真的懂了,更方便了自己之后看、以及大家交流。
当然,除了写题解,还要整理做题的方法、套路、模板,这些会随着你的经验慢慢形成的。
在B站有个小姐姐演示了如何用iPad做笔记,也讲了小白如何上手LeetCode,值得一看。
程序媛分享 | LeetCode小白如何上手刷题?iPad学习方法 | 刷题清单 | 新手指南 | 刷题找工作 | IT类
刷题最大的障碍是自己。特别是新手,很可能由于刚接触LeetCode感觉太难就没有毅力坚持下去,导致半途而废。而且,刷题更重要的是坚持,做题的感觉都需要手感进行保持的。
所以,如果能有个组织交流和监督就好了。
我组织了”每日一题交流群“的活动,并且做了个网站http://140.143.79.116/#/check来监督大家打卡。群的规则是每天发题和打卡,如果一周没有参加的话就会被踢出群(如果有更好的监督方式请告诉我)。
事实证明这种大家一起做同一道题目,并且一起交流讨论的氛围非常好。更多规则可以看下面的文章,我的联系方式在网站的首页。
负雪明烛:助力每日一题!每日一题打卡网站上线!
如果你已经过了小白的阶段,那么应该做些提高项目。
所谓周赛,就是每周日上午,LeetCode组织的一场比赛,总共4道题,一般是Easy一道,Medium两道,Hard一道。中英文网站同时开始,题目相同。
做周赛的目的是检验我们的学习成果,毕竟这些题目都是新的,就像考试一样。
不要担心自己做不出来,只要尽力而为就好了,我一般的目标是解决前三道,第4道Hard做不出来也没有心理负担。
参加完比赛之后,看下别人的解答,因为都是自己苦思冥想过的方法,因此可以提高地特别快。
我最好的周赛成绩是全球28名,当时非常兴奋,开心了一整天。
这一点和入门篇的做好笔记 略有重复,但是仍然要说,因为如果只是单纯的记录笔记和写每个题目的记录是不够的。
我在写博客的时候就落入了只记录不总结的误区中,单个题目的解决方案只会有正在做这个题的人看,但是你的提炼总结可以让你和大家都获得成长,这也是我写这个回答的原因。
上文中提到的labuladong的算法小抄就是个很好的总结与分享例子。
最后,希望大家都能够通过刷LeetCode获得成长,拿到自己满意的Offer。
期待你的点赞、关注、分享。