知乎热榜 ( ) • 2022-01-27 02:20
Super Mario的回答

我觉得我应该也有资格回答问题了,主要是最近leetcode周赛题目变简单了,半小时ac对我这个学物理的,从来没接触过计算机竞赛的人,也不是不可能的了。

贴一下最近参加的几次周赛成绩:

277场,76名,12分半做完,然而前50都没进。

276场,107名,31分钟做完,因为一个愚蠢错误,罚了5分钟。

273场,114名, 33分钟做完

272场,11分钟做完,史上最高名次

当然了,我绝对称不上大神。看看排名,只能排到100名左右,说明现在周赛卷的越来越厉害了。


其实我第一次参加比赛的时候,也是只做出了一道题,这是我第一场比赛的截图,半个小时,吭哧吭哧就做出1道题,而且还错了两次。

那我是如何做到的呢?

好多人都说什么看算法导论,说实话,我一页都没看过。

然后还有很多大神们贴出什么所谓的算法学习笔记,说什么只要看通了笔记,刷题100道顶别人300道,这也是没什么道理。其实我一直觉得,做笔记有的时候反而耽误人思考,能写到笔记里的,其实都是你掌握非常熟练的东西了,充其量起到强化记忆的作用。而且如果你为了笔记的美观,花费很多时间在这上面,其实是自己欺骗自己的行为,这就是所谓的假装自己在学习。

那怎么办,两个词,做题,反思,做题,反思.....学习算法没有捷径可以走。

比如,第一题,two sum,先写一个双重循环,过了,发现自己时间仅仅击败5%的人,然后看很多人用o(n)过的,于是我知道了哈希表。然后我赶快学习哈希表的原理,python是用dictionary来实现。然后再写,时间短了很多。

接下来怎么办,找到对应的tag,接着练类似的。

然后呢?不要再练了!因为哈希表已经成为了你的舒适区。你要知道算法面试不仅仅有哈希表,你要换个专题。于是你再找另一道,比如binary search,继续练。

当然,可能过一段时间,你又把哈希表忘了,没关系,如果你发现某道题需要哈希表,你没想到,那说明哈希表已经不再是你的舒适区,你要重新拾起来。可能你说,那不就没完没了?可以告诉你,第二遍再拾起来要比第一遍快的多。

算法的题目千变万化,而算法就那么几种,当你做了好几百道题的时候,就形成肌肉记忆了。

有人可能会继续问,那为什么某某练了几十道就过了算法面试了?我只想说,某某不是你,他是天才,你是笨蛋,笨蛋就应该多练,不要管天才怎么样。就像跑马拉松一样,你要保持自己的节奏,不要管周围的人,一看黑人跑这么快,你直接跟着他跑,很快就万劫不复了。


当然了,我也不是没有过瓶颈,我曾经在很长一段时间,一直是3题选手,最后一题只要不是那种将近1000人能过的水题,基本做不出来,排名总是前10%左右晃荡。然后怎么办?

如果你接触过codeforces平台就知道,codeforces的题目难度分的更细。leetcode只有三个等级,easy,medium,hard,而codeforces则有800-3500,二十多个梯度。大体上,leetcode easy相当于codeforces 800-1100,medium相当于1200-1500,而hard则相当于1600-2000。codeforces 2000+的题目,如果出现在面试中就太难了,而leetcode收录题目的原则就是他必须是面试题,因此leetcode很少会出现这样的题目。

有一个理论,你要想在比赛中稳定做出难度为x的题,平时放松状态下必须能做出x+200的题目才行。同样道理,leetcode周赛的hard是最高难度的题目,你要想能稳定做出leetcode最高难度的题目,必须要练习比leetcode hard难度还高的题目。也就是说,你要换平台了。

我后来就开始转战codeforces,不得不说codeforces大神真的太多了,我被虐的体无完肤。尤其那个tourist,他是如何做到5分钟就做出我半个小时都做不出来的题目的?不过,在被虐了1年后,我终于上了蓝,然后上了紫,然后掉回蓝,然后再上紫.... 当我习惯了难度2000+的题目之后,我发现leetcode的hard也没有那么难了。这时候我再参加周赛,就可以在题目简单的时候半小时解决战斗,而那种不到300人能过的难题也能过了。

当然了,如果你是medium都够呛的算法小白,不要尝试codeforces,因为codeforces的算法考的很难,而且很不直接,很多题目你根本想不到要用这个算法,leetcode则相对很直接,因此你先在leetcode新手教学村混熟了,有一定算法基础,比如周赛稳定3题那种,再去打codeforces。

总之,你不用学过竞赛,你甚至都不需要是计算机专业,只要肯钻下去,你也能半个小时AC4题。