分享|两百题打卡!(经验分享)
1659
2024.11.28
2024.11.29
发布于 湖北

image.png

  • 预计阅读本文需要10-15分钟

本文仅基于个人刷题理解,旨在记录刷题感想,也希望能够帮助到新手度过苦难期,我将自己的体会与心得毫无保留地写了下来。

本文不构成任何实质性建议,具体请自行判断。

如有异议,您是对的。



想来来力扣也有一年整了,就浅浅记录一下吧~

从大四保研爽玩两个月后开始考虑找工作、实习的事情,发现目前的形式很是严峻,并且在经过一次十分尴尬的面试(当时投了一个小米日常实习的,上来就让我手撸算法题,但我ide都没装。。。),我意识到了刷题的重要性。

一开始刷题是真的什么都不会,大学课堂里学的很浅,而且没有实践,平时的实验都是cv的,也没有锻炼到真正的能力。反正闲着也是闲着,当时没事就去泡图书馆,最开始答案是看不懂的,代码是对着敲的,hard是一做至少一下午的。我还深刻的记得一道题目叫“编辑距离”,动态规划的,那道题给我幼小的心灵带来了巨大的打击。“这是什么?”,“我在哪?”,“我为什么要做这道题?”,“我怎么连答案都看不懂?”,给我干懵逼了一个下午。虽然现在想起来还是有套路可循的,但当时的我确实接触的题目太少了,还是dp。

后来刷完了面试经典150之后就没再专门找题单了,每天就刷刷中等题,中间也有段时间是没什么兴趣了,简单的不想刷,难得也不想刷,正好六月份也忙着毕业的事情(其实还有入坑崩铁)了,就一整个月没刷。

我的刷题“事业”焕发“第二春”是在尝试刷灵神题单之后。一开始面对几乎全是hard的题目确实有些手忙脚乱。后来还是咬咬牙坚持了下来,(亏得平时牛奶喝得多,后槽牙没碎(bushi))。

一开始做题是很慢的,我经常一道hard做一整个下午,虽然现在有的时候也是,但是遇到类似的做过的题,一小时内大概就能做出来了。下面,我分几点谈一谈我这一年来的体会吧。

关于思考

有的同学只喜欢敲代码不喜欢思考,这是不对的。要想真正理解透彻一道题目,一定是思考时间远大于敲代码时间!夸张一点我说20比1都不过分,你需要想清楚为什么这样做,以及为什么这么做可以而那么做不行?有时候完成一道题就一个小时,但是我们需要复盘,拓展思维,看别人有没有更好的做法等等,这花的时间可能比你做题的时间更长!但是我也认为这才是我们提升最大的时候!!

那些大佬做题快也绝不是因为代码敲得快,而是本身排除错误想法,找到正确思路的思维更快!要是思路非常清晰,代码实现起来其实不需要多少时间~

关于难度分

我个人分为三档,(目前是这么考虑的,以后亦可能会变)2300及以下,2500左右,2700以上。

2300以下的(一般2000就是hard的分界线)。有的同学一看到hard就不想做,其实有的hard也没有那么hard,至少2300以下的大概率没有。不过前提是得做过类似的题目。如果说第一次遇到这个知识点想不到,做不出来,这是很正常的,绝大部分人都是这样,我们多做做类似的题目,就知道还是有迹可循,有“模板”和“套路”的,比如dp,我最近就刷灵神的dp题单,刷了有三分之二了。其实常见的题型也就那些,背包,lis,状压,等等,你做的多了,自然就知道他要考什么。当然dp可能是较为特殊的一类,他需要投入大量时间才能掌握精髓,正如灵神所说:dp100题才算入门。

2500开始就不仅仅是会不会做的问题了,题目往往夹杂着多个知识点,即使你有思路,实现这个思路也需要相当大的功夫。在做熟练2300以下的题目时,2500的题目也不一定会有思路,它往往用到的技巧更复杂,并且实现起来较为困难。但是有了前面的基础,你大概率是勉强可以看懂答案的。这一难度我愿称之为普通面试中最最难的一档了吧,自我感觉一般撑死也就出2300以下的,2500基本没有,(除非对面真的不想要你)

2700以及以上的。说实话这种题目我做的屈指可数,本身力扣上我猜也不超过200题(保守估计,不保守应该不到100吧),毕竟总共才八百多道hard。到了这个难度,已经不是凡人能够涉及的领域了,一般是竞赛大佬或者有相当强力的算法基本功并刷过大量题目才能去尝试,他往往涉及到很偏的技巧,你根本没见过,或者有相当大的思维量让你无从下手。我等凡人就此打住吧~

关于新题(新知识点)

遇到新题(新知识点)做不出来是很正常的!不要气馁(你要真能第一次做出来,也不至于在这里刷力扣了),我们绝大多数都只是普通人,只是站在巨人的肩膀上。那些个有名字的算法哪个不是前辈们苦思冥想很长时间得出来的?然后你跟我说你™想一个下午就自己想出来?

所以我们能做到就是理解并熟练运用,怎么理解并熟练运用?多做题!没有别的办法。“孰能生巧,厚积薄发”这些成语不是空穴来风,你的实力一定与你的刷题量,花的时间成正比!(前提是你别老刷easy,一道hard的思考量可能是easy的二三十倍。。。)正确的刷题姿势永远是刷难度分高于自己两三百的题目,这样才有提升。

至于你要问什么时候才能学完所有知识点呢?反正我现在还没学完,如果你要学会并基本掌握的话,可能得1000题以上吧~但是如果面试要求没那么高的话,其实也没必要刷那么多,会常见的技巧就行了,所以还是得看需求。

关于遇到实在看不懂的题目

比如我之前遇到的那一道编辑距离,其实是dp刷少了没有感觉,也就类似于等级还不够,理解不了高level的题目。这种情况没必要死磕,想一个下午想不通就不要想了,加入收藏夹,继续打怪升级,等等级够了再回来挑战,相信你会有新的理解和战胜以往失败自己的成就感。

关于“背模板”

有的同学面对未知会有一种恐惧心理,当然这是人类的天性,认为那些自己想不通或者根本想不到的题解一定是猜出来的,或者是模板背的多套出来的。我一开始也有这么认为过。我不否认那些非常高大上的算法在想出来或者被发明的时候可能是“碰巧”的发明出来的。不说算法吧,就连我们初中学化学的时候不也知道苯环的结构是一个科学家做梦梦到的,然后再去实验验证的吗?(我记不清是不是苯环了,记错了轻喷)。一开始不会的时候,确实是要“背模板”的,但是你要是觉得那些大佬都是只会死背模板的话,那就大错特错了。实际上,我们在不会的时候需要借助前人的脚手架帮助我们,但随着刷题量的提升,你自然会对模板有更深一层次的理解,想出为什么可以这么做,以及这么做的精妙之处。更进一步的,在你逐步理解了一切之后,你才能够更加灵活的“套用”模板,以及增加自己的想法等等。

你不会真以为你睡个午觉也能梦见苯环的结构吧?能“猜出来”是一种本事,但他一定是基于平时大量的积累,对知识有深层次的理解,才有可能“猜出来”的,所以,,,你懂得。

关于智商(天赋)

有的同学可能会问,我智商不够用,真的有必要坚持吗?首先给出我的个人理解:仅对于找工作而言:努力远大于天赋。我也有实在看不懂,理解不了或者看了就劝退的题目,但这并不妨碍我坚持刷题。关键是要找到自己的定位。你要是相当华为天才少年,年入百万,那你出门左转许愿池(bushi)。你要是只想找个符合自己能力的工作,挑战自己能力的极限,那么努力是一定可以做到的,不用怀疑,一定可以,我说的!我们没必要攀比,总有人比自己厉害,真正需要比的是昨天的自己。你以为985、清华北大的就不竞争了吗?不不不,虽然明面上不说,内部还是有一点歧视的。比如全奖留美的就看不起保研本校的,保研本校的就看不起被迫找工作的,等等。你要是想攀比,那一定是没有上限的,而人生绝大多数不快乐恰好就来自于攀比。。。

正如张雪峰所说,有的行业你不需要做到最顶尖就能获得还不错的薪资,我们这个行业虽然这几年异常的卷,但是普通人努努力肯定还是有机会的(应该吧)。

关于按题单刷和随机刷

这一部分灵神那里说的已经很清楚了,我这里简单概括一下。新手开始无疑是按题单针对新知识点集中刷题效率最高的,这会加强我们对新知识点的理解,你要是东刷一道,西刷一道,就有点扶了东墙倒西墙的感觉。但是这也有缺点,就是帮我们减少了思考量,你已经知道这个题目考什么了,就不会往其他方向想,这其实不利于提升我们随机应变的能力。所以在系统刷完知识点之后还需要进行随机训练,以加深我们对知识点应用场景的理解和变通。

关于“遗忘”

有的同学说几个月前刷过的题目再次遇到就不会了,跟“没刷过”一样。我的理解:这种原因有且仅有一个:你当时没把题目理解透彻。回顾我一年的刷题历程,只要是我当时彻底想通了的题目,第二次有99%以上的可能性可以做出来,无非就是快慢的问题,因为第二次刷无非就是复现第一次刷的思路,你第一次理解理解透彻了,很长一段时间内是不会遗忘的(反正我这一年做过的题目90%多是可以复现的)。那还有百分之十呢?还有百分之十是当时做的时候确实超出了我的实力范围,当时可能连题解都没看懂,自然不能理解透彻(这里点名批评“动态规划”!)。而上面说的99%是基于彻底理解的。当然,这并不是说不需要“复习”,毕竟遗忘曲线是客观存在的,你很长时间不刷自然是会遗忘的。但是我懒,等我忘了再说。

关于日常训练和打周赛

这一部分还写不了,毕竟我还没开始周赛。但我知道针对找工作,打周赛还是很有必要的,acm模式和限时的限制更接近我们真实面试的情况。看一下看的人多不多吧,多的话我刷个半年再回来更~

结语

刷题的道路注定是孤独且乏味的。多少个阳光明媚的下午,看到图书馆外情侣与小孩在玩耍,而我们只能坐着冷板凳,面对枯燥的代码和改不完的bug。
但请你相信,付出一定有回报,坚持一定会成功。你投入的大量时间、经历的无数次挫败、无数次重塑,终将成为未来某一天厚积薄发的底气!
诸君共勉。

一位正在成长期的扣友
(所以这玩意儿到底怎么右对齐。。。)

评论 (8)