leetcode(两个月刷400道leetcode之后)

懵懂先生 网文资讯leetcode(两个月刷400道leetcode之后)已关闭评论119阅读模式

文章源自略懂百科-http://wswcn.cn/24852.html

最码农 昨天文章源自略懂百科-http://wswcn.cn/24852.html

本文整理自知乎问答,仅用于学术分享,如有侵权,请联系后台作删文处理。文章源自略懂百科-http://wswcn.cn/24852.html

观点一文章源自略懂百科-http://wswcn.cn/24852.html

面试是与人交流的过程文章源自略懂百科-http://wswcn.cn/24852.html

作者|硅谷IT胖子文章源自略懂百科-http://wswcn.cn/24852.html

https://www.zhihu.com/question/32019460/answer/1214537663文章源自略懂百科-http://wswcn.cn/24852.html

这个问题其实有隐蔽性,翻译成简单的程序语言:文章源自略懂百科-http://wswcn.cn/24852.html

刷完LeetCode != 会面试会面试 + 运气 == 能拿到Offer文章源自略懂百科-http://wswcn.cn/24852.html

让我挨个解释:文章源自略懂百科-http://wswcn.cn/24852.html

运气(大势)文章源自略懂百科-http://wswcn.cn/24852.html

运气是最重要也最玄学的一个因素了,但绝不可忽略。所以不要轻易说刷LeetCode没用,很可能,你只是欠缺一点点运气而已。运气包括太多方面了:文章源自略懂百科-http://wswcn.cn/24852.html

经济:经济不好,全Hiring Freeze,LeetCode刷得再好也不行;经济太好,OPT不够月数了,某些公司也不要连面试都不给,因为抽签时太难。文章源自略懂百科-http://wswcn.cn/24852.html

政策:我现在在亚利桑那集中营里写的这些,你还愿意接着看么?文章源自略懂百科-http://wswcn.cn/24852.html

突发事件:疫情来了,所有作线下服务的都惨了。拿到Offer也能收回,甚至intern也有不少推迟或是收回的,今年(2020年)屡见不鲜。文章源自略懂百科-http://wswcn.cn/24852.html

运气(面试)文章源自略懂百科-http://wswcn.cn/24852.html

面试官是比较随机的,每个人的状态、出题、风格都不一样。文章源自略懂百科-http://wswcn.cn/24852.html

气场:气场要是和面试官抵触,本身就很容易被挂;文章源自略懂百科-http://wswcn.cn/24852.html

面试官心情:很多人把公司面试看得很神圣,殊不知这只是工程师日常的苦难和重担之一,每周都要重复多次。面试官赶deadline可能会不耐烦,也可能就随手放过;面试官早上被老婆骂了;面试官被老板骂了;面试官来的路上堵车了。文章源自略懂百科-http://wswcn.cn/24852.html

我绝不是说,大公司的面试很随机。正相反,大公司的面试非常标准,判断非常客观。只不过我想表达的是:面试本身是人来主导的,只要是人,就会有随机性和个人情绪。举个例子:你看到一个面试官黑着脸、不耐烦,不要认为他不是个好人、是针对你个人的、会注定挂你,很可能他只是来的路上车被哪个混蛋给蹭了而已。文章源自略懂百科-http://wswcn.cn/24852.html

:面试官出哪道题,随机性很强。很可能换个人面,另外一道题,就轻松过了,而这题你正好不会。题的随机性,实在是太强了。文章源自略懂百科-http://wswcn.cn/24852.html

接下来说文章源自略懂百科-http://wswcn.cn/24852.html

刷完LeetCode != 会面试刷完LeetCode的定义文章源自略懂百科-http://wswcn.cn/24852.html

LeetCode有些人是纯刷的,有些人是硬记的,有些人是理解的,有些人是掌握的。这是我个人认为的4个层次。文章源自略懂百科-http://wswcn.cn/24852.html

第一层次,纯刷文章源自略懂百科-http://wswcn.cn/24852.html

很简单的层次,面试时的感受是:这题我见过。结果一般是:卒。文章源自略懂百科-http://wswcn.cn/24852.html

因为纯刷题,很多细节记不住,也不理解这道题, 而且题太多了还容易混淆。除了一些印象以外,帮助并不大,当然,肯定是比连题都理解了10分钟才明白要干嘛的有优势倒是。文章源自略懂百科-http://wswcn.cn/24852.html

这里我想说的一个全篇隐含前提是:绝大多数刷LeetCode的人,基础和技术都平平,天资也不见得如何适合计算机,过去写的代码也不多。如果你是玩ACM的,或是初中就开始写code的,这个回答并不适合你。文章源自略懂百科-http://wswcn.cn/24852.html

纯靠自身功力能作出LeetCode Medium题的人,其实面试中并不少见,但大多是经验丰富的码农,或是CS PhD等,对普通人的借鉴意义不大。对于普通人来说,如果停留在纯刷的层面上,面试时碰到还是有很大概率会挂掉的。文章源自略懂百科-http://wswcn.cn/24852.html

第二层次,硬记文章源自略懂百科-http://wswcn.cn/24852.html

硬记层次的定义是:文章源自略懂百科-http://wswcn.cn/24852.html

亲手写过这道题(Copy Paste不算)在做完题后,短期(2天-1个月,因人天资、状态而异)内不会忘记,但长期一定会忘记文章源自略懂百科-http://wswcn.cn/24852.html

别小看硬记层次。我相信很多进了一线大厂的人,刷LeetCode不过是硬记层次。有些人天资不适合理工和数学(比如我自己),但记忆力极佳,短期内能记住大量的东西。这对那种原题面试基本上是有非常大的优势的,因为记得所有的关键逻辑甚至所有的edge case,不可能出bug,也就很难挂。文章源自略懂百科-http://wswcn.cn/24852.html

但这种硬记层次最大的问题是:一旦面对题目的变体,比如Google面试,很容易抓瞎。因为是真的不会啊!后面还有Followup和扩展也很容易露馅。文章源自略懂百科-http://wswcn.cn/24852.html

硬记层次的好处很明显:文章源自略懂百科-http://wswcn.cn/24852.html

适合文科天资、强记忆力弱分析弱基础的人只要努力,回报特别明显和直接有些人是先记住,后面才理解的,硬记是一种学习方式,并非效率低文章源自略懂百科-http://wswcn.cn/24852.html

坏处:文章源自略懂百科-http://wswcn.cn/24852.html

一旦考题灵活,很容易挂,成功率并不那么高时效性太强,施法前摇太高了每次跳槽面试都这么搞一把太累,而且伤脑子文章源自略懂百科-http://wswcn.cn/24852.html

第三层次,理解文章源自略懂百科-http://wswcn.cn/24852.html

理解层次我的定义是:文章源自略懂百科-http://wswcn.cn/24852.html

任何时候,拿到这道题,都可以做出来,如果忘记了,也会自己推断和分析出来。换句话说,面试基本上不会挂了(除非是被故意阴了)真正理解了这道题背后所隐藏的逻辑、思想和算法,并且能够扩展到类似其它问题,以及处理所有的followup文章源自略懂百科-http://wswcn.cn/24852.html

我很久以前面试时,一些题还处于硬记层次。这次疫情在家无聊,随手做了几道,发现几年没做题,有些题竟然自己进化到了理解层次。可见,我自己是典型的先记再理解的学习类型,也可能是工作强度高导致的个人能力上升。文章源自略懂百科-http://wswcn.cn/24852.html

理解层次最重要的标志就是不需要重新看题也能面试。这其实意义极大:说走就走,随时可以面试,意味着根本不怕裁员、被开、经济危机、组里政治斗争,意味着一旦有更好的机会,基本上可以立刻去尝试。而且,如果大多数题都到了理解层次,那么面试的成功率也极其高,很可能是面5家拿到4个Offer这种。文章源自略懂百科-http://wswcn.cn/24852.html

第四层次,掌握文章源自略懂百科-http://wswcn.cn/24852.html

掌握就是不仅完全理解一道题,并且能给人讲清楚,能把纯刷、硬记层次的人,无论智商多少,都提升到理解层次。文章源自略懂百科-http://wswcn.cn/24852.html

个人认为是没必要修炼到的一个层次,用处不大。要知道题太多,有第三层次基本上面试都不会挂了,有这个时间还不如提升自己的系统设计能力,甚至工作和人际能力。文章源自略懂百科-http://wswcn.cn/24852.html

综合来说,刷完LeetCode,很多人只是停留在第一层次和第二层次,但如果大多数热门题已经有第二层次了,也可勉强一战,万一混进大厂就舒服了对吧?这时候运气和经济是主导因素;到了第三层次,基本上无视经济和运气这些因素了,但个人觉得大部分天资普通的人都是在工作几年后才(有时间、有耐性、有悟性)修炼到第三层次的,也不必强求。文章源自略懂百科-http://wswcn.cn/24852.html

刷完LeetCode != 会面试文章源自略懂百科-http://wswcn.cn/24852.html

最后来解释这个。面试是一门学问、需要研究,这句话没有实际意义,但我想说的是下一句:文章源自略懂百科-http://wswcn.cn/24852.html

面试是与人交流的过程。文章源自略懂百科-http://wswcn.cn/24852.html

作出题不见得拿到Offer,这已经是业界共识。举个简单例子:很多人能作出题,但交流太烂,基础太薄弱,稍微一问就露馅,就很容易挂。面试不是高考,没有标准答案,没有100%客观的评判。文章源自略懂百科-http://wswcn.cn/24852.html

所以,如果面试时100%的精力都在做题或是思考或是硬挖出最初的做法,很容易忽视交流和分析,从而交流上失分甚至挂掉。这也是为什么我说硬记层次面试成功率并不高、而一旦到了理解层次几乎很难挂的原因:文章源自略懂百科-http://wswcn.cn/24852.html

在理解层次上,一个人的思维过程就是分析过程,只要同时说给面试官听即可,同时顺便自然地写出代码。换句话说,在这个层次,这人基本上只有50%的精力在考虑具体程序,50%的精力在分析和解说上,自然容易沟通;文章源自略懂百科-http://wswcn.cn/24852.html

而硬记层次可能80%的精力都在回忆自己当时怎么做的、应该怎么解释,所以面试官听不懂,答案duang的一下就出来了,很突兀。那么,如果不想花时间、只能达到硬记的层次,就要加强交流、演说方面的训练。文章源自略懂百科-http://wswcn.cn/24852.html

个人认为,交流不是口语、英文,这也是一大误区。交流,是一种能力,怎么用最简单最实用的办法,让对方明白你的思路、推导和过程。很多美国人的交流也不行,虽然是母语,啰哩啰嗦地说一大堆,最后反而给人一种这么简单的事情,话好多的反感。文章源自略懂百科-http://wswcn.cn/24852.html

交流的一个重要因素是,要跟别人在同一个平面:不仅仅要知道题的做法,还要知道别人一般是怎么想的、怎么能给他(她)解释清楚。文章源自略懂百科-http://wswcn.cn/24852.html

这样看,面试又不简单了:因为实战中,最多只有50%-70%的精力在应付题本身,而平时做题是100%。文章源自略懂百科-http://wswcn.cn/24852.html

所以,刷完LeetCode的人,很可能面试还不够熟练,甚至还没入门、还会犯低级错误。这也是我认为刷完LeetCode != 会面试的根本原因。文章源自略懂百科-http://wswcn.cn/24852.html

当然,最后抬个杠,LeetCode不会刷完的,子子孙孙无穷匮也。1000多道题,最后只能让第二层次硬记越来越困难,客观上是逼迫所有人往第三层次理解发展的,即:文章源自略懂百科-http://wswcn.cn/24852.html

LeetCode做完多少题,已经不是一个指标了;更关键的是,一个人理解了多少题。文章源自略懂百科-http://wswcn.cn/24852.html

如果说对策,本文就太长了。我只能说刷题+实战:刷题是基础,实战中提高技巧和交流,两者循环往复,实力提高会很快。当然,累。文章源自略懂百科-http://wswcn.cn/24852.html

观点二文章源自略懂百科-http://wswcn.cn/24852.html

尽量精刷文章源自略懂百科-http://wswcn.cn/24852.html

作者|胡津铭文章源自略懂百科-http://wswcn.cn/24852.html

https://www.zhihu.com/question/32019460/answer/887877092文章源自略懂百科-http://wswcn.cn/24852.html

算法弱鸡过来强答一下。文章源自略懂百科-http://wswcn.cn/24852.html

在LeetCode上前后一年多陆陆续续刷了760道题左右,基本上把大部分的免费题刷完了。文章源自略懂百科-http://wswcn.cn/24852.html

刷LeetCode之前的基础:文章源自略懂百科-http://wswcn.cn/24852.html

本科非CS,与CS相关的课只有一门C++,跟过Coursera上的Algorithm课程,学过基本的数据结构。胡乱看过Algorithms的前几章和CLRS书,前者跟着课看的话大部分能看懂,后者很多看不懂。扫过CLRS的一些习题但太菜了做不动。硕士转了CS,也没上过算法课和数据结构课,做的是机器学习方向。这时候做LeetCode上难一些的easy题就会很吃力,medium中比较简单的题可能能做出来,hard一道都做不出。文章源自略懂百科-http://wswcn.cn/24852.html

刷LeetCode的方式:文章源自略懂百科-http://wswcn.cn/24852.html

先从Top100 liked 的tag开始刷(这个tag的题我刷了好几遍)。刷完之后按topic的tag刷过一段时间,后来改成了选择难度之后按顺序刷。一开始就按照ac率从高到低乱刷,后面就只刷点赞比点踩多不少的题。有一段时间每周的周赛基本都参加,不过最后也就是2000分的水准,比较弱。我一道题如果较长时间想不出来(比如半小时到一小时),就会去看discussion,主要是太懒了不想动脑子。自己A了的题也会去看discussion,去学别人比较好的解法(后来是学写法),然后自己照着敲一遍。不会或者不是最优解法的题,过一段时间如果记得的话就再做一遍,不过一般都是不记得了:(文章源自略懂百科-http://wswcn.cn/24852.html

刷LeetCode之后:文章源自略懂百科-http://wswcn.cn/24852.html

大概刷了400多道题之后开始找实习,这个时候的水准是hard多数做不出,medium基本都能做出。找实习的时候比较闲,大概面了10来家公司,吃到了hulu的拒信,其他的公司例如Google/MS/阿里/腾讯/头条这些都算是比较轻松地拿到了offer。hulu的题当时确实就是做不出,实力不济。然后后面比较闲又刷了些题,秋招开始的前一个月因为忙和懒就没怎么刷题练习了,这个时候的水准是hard能做出一部分吧。秋招面的公司不多,有Google/阿里/腾讯/头条之类的,算法/研发岗都有投,都拿到了offer,国内企业的话给的都是ssp。就做题而言,个人感觉是外企hulu/airbnb的题不一定能做出来,国内的企业的话头条的题可能会碰到些挑战(据说很多创业公司/独角兽公司的题很难,不过我全都没投,就不知道怎么样了)。当然了,面试涉及的因素/能力很多,还有沟通交流、项目、其他cs/机器学习基础等等,那就是另外一回事情了。我在Github上有写一些这方面的总结,也写了一些自己转专业自学CS的心得,也欢迎参考~文章源自略懂百科-http://wswcn.cn/24852.html

tips for interview:文章源自略懂百科-http://wswcn.cn/24852.html

https://github.com/conanhujinming/tips_for_interview/blob/master/README-zh_CN.md文章源自略懂百科-http://wswcn.cn/24852.html

总结:文章源自略懂百科-http://wswcn.cn/24852.html

刷LeetCode尽量还是精刷。但即便你像我一样基础一般又懒得精刷,单纯地堆砌题量也能搞定大部分公司出的题了。建议多做那种自己要费一些力气才能做出来,但又不是完全做不出来的题,然后少做自己可以秒杀的题。可以找小伙伴组队一起刷,相互督促鼓励交流讨论,共同进步~文章源自略懂百科-http://wswcn.cn/24852.html

观点三文章源自略懂百科-http://wswcn.cn/24852.html

又说又练才是真把式文章源自略懂百科-http://wswcn.cn/24852.html

作者|北南文章源自略懂百科-http://wswcn.cn/24852.html

https://www.zhihu.com/question/32019460/answer/1211129124文章源自略懂百科-http://wswcn.cn/24852.html

如果你是把目标定在了互联网大厂,包括一些临近上市的当红炸子鸡,那我觉得你不仅仅要题目做的出来, 更重要的是要能说的明白。文章源自略懂百科-http://wswcn.cn/24852.html

正所谓光说不练假把式,光练不说傻把式,又说又练才是真把式。文章源自略懂百科-http://wswcn.cn/24852.html

做的出来这一步我不多说了,几个高赞回答都说的很好。做的出来是一切的基础,是后续沟通的前提。文章源自略懂百科-http://wswcn.cn/24852.html

但做的出来不是最终目的,你面对的是一个有灵有肉的面试官,而不是自动测试的机器,否则一个leetcode这样的系统不就可以取代面试官了?你的目的是让对方喜欢你,是用说来让对方知晓你的能力,也是用说来战胜其他竞争者脱颖而出。那我就重点来说一下说的明白文章源自略懂百科-http://wswcn.cn/24852.html

1. 说清楚算法的时间复杂度和空间复杂度,这个很多算法会有平均情况和最差情况, 你也要讨论清楚什么时候会出现最差情况。文章源自略懂百科-http://wswcn.cn/24852.html

2. 说清楚各种边界条件,要知道如何测试你的代码。比如说对于输入为空返回什么等等。leetcode设计的那些test cases是这个网站价值的重中之重。文章源自略懂百科-http://wswcn.cn/24852.html

3. 说清楚算法的适用条件,也就是什么时候这个算法才是正确的。比如说如果图中有边的长度是负值,那么dijkstra算法还能用吗?又比如说选取top k这种题会有好多种算法,它们之间的优劣又是怎么样的?在什么情况下某种算法才是最优的?文章源自略懂百科-http://wswcn.cn/24852.html

4. 讨论多线程或者分布式的情况。很多公司会在你题目做完后,给你几个follow up。比如说就会问你,如果把你的算法放到100台机器上,这个算法还成立吗?要如何修改?文章源自略懂百科-http://wswcn.cn/24852.html

5. 讨论极大数据量的情况。和第4点类似,比如说你做个排序,如果内存中放不下所有的元素,你如何处理?时间复杂度和空间复杂度又会有怎样的变化?文章源自略懂百科-http://wswcn.cn/24852.html

以上是比较硬的说的明白,下面还有比较软的说的明白。也就是现在HR们常说的软技能。文章源自略懂百科-http://wswcn.cn/24852.html

1. 你是否能问对问题?文章源自略懂百科-http://wswcn.cn/24852.html

这里既包括一些clarifying的问题, 也包括你是不是能合理的要到面试官的提示。文章源自略懂百科-http://wswcn.cn/24852.html

2. 你是否能说清楚你的思维过程?有逻辑,有条理,而不是给面试官感觉你事先看过答案。文章源自略懂百科-http://wswcn.cn/24852.html

有些朋友看完题上来第一句话就是这题用DP,你以为你在打ACM个人战吗?你不和你队友说下思路吗?难道不是先找一些子结构,装模作样的试试看,然后再说这题可以用DP,元芳,你怎么看吗?当然,你也不用太戏精,自然就好。文章源自略懂百科-http://wswcn.cn/24852.html

3. 你是否能接着面试官给的提示进行思考和讨论,而不是固执己见。文章源自略懂百科-http://wswcn.cn/24852.html

关于这一点,我想很多朋友会看过一些面经,有时候候选人已经是给出最优解了,但是面试官会给出不同的意见,引导候选人去做一个其他的解法。这是为什么?是面试官不知道最优解吗?有这个可能,但也有可能是面试官通过这一点来和你沟通,看你如和应对。往往无视面试官意见的朋友,是不容易得到很好的反馈的。当然,我也不是说面试官说啥你都照做,因为可能因为你被面试官故意误导或者他也真不会造成题目没有及时做出来。如何说服对方,这就又是一门学问了。文章源自略懂百科-http://wswcn.cn/24852.html

4. 你是否能控制好时间,控制节奏,甚至引导面试官来到你更熟悉的领域。文章源自略懂百科-http://wswcn.cn/24852.html

其实软的东西有很多,我以后还可以继续补充。我说这些也不是吓唬大家,让大家焦虑,其实也没必要焦虑,因为这些软技能咱们大多数程序员都很一般,很少有特别好的。不管你是不是科班出身,学校也不教这个。但也正因为咱们都起点比较低,所以提升的空间才大,你稍微努力练习一下,就能有机会脱颖而出。文章源自略懂百科-http://wswcn.cn/24852.html

我建议:文章源自略懂百科-http://wswcn.cn/24852.html

找几个朋友互相练习, 你要习惯在团队里工作一边刷题,一边自言自语讲自己的思路,自问自答把自己做题和自言自语的视频录下来,像我这样文章源自略懂百科-http://wswcn.cn/24852.html

我觉得如果你能把以上把握好,那么你算法coding轮应该可以得到不错的分数。可面试还有系统设计轮和behavior问题轮啊,这些怎么办?其实说的明白是相通的,面试不仅仅是知识水平的较量,同样也是你和你未来同事的第一次合作,面试官和你心里都会装着同一个问题,你以后愿意和这样的一个人天天说话吗?所以说呢,把话说好,会为你的面试加分不少。文章源自略懂百科-http://wswcn.cn/24852.html

https://www.youtube.com/watch%3Fv%3D7oJ-5CShtUQ文章源自略懂百科-http://wswcn.cn/24852.html

对于觉得学数据结构与算法有困难的朋友们,可以看看我这篇。少则得,多则惑。其实面试中绝大多数题目并不要你会太多高深的数据结构和算法,你把二叉树和哈希表弄明白了,就可以搞定小一半题目了。文章源自略懂百科-http://wswcn.cn/24852.html

https://www.zhihu.com/question/303208441/answer/538071425文章源自略懂百科-http://wswcn.cn/24852.html

文章源自略懂百科-http://wswcn.cn/24852.html

懵懂先生
  • 本文由 发表于 2022年8月5日 12:11:52
  • 转载请注明:http://wswcn.cn/24852.html
网文资讯

约德尔人(云顶约德尔人属性再增)

云顶之弈版本更新之后,海克斯羁绊获得增强,接下来就给大家介绍一下海克斯阵容的玩法吧!版本改动推荐阵容 约德尔人站位分析将阵容的核心主力放在最中间的位置,按照坦度质量的强度来依次排列,防止被敌方英雄集火...
网文资讯

人口最多的国家(全球人口最多的7个国家)

目前来说,中国的人口在全世界是数一数二的,几乎和我们的邻居印度差不多,曾经有报道称,印度前一段时间已经超过中国,一跃成为全世界人口第一大,但根据有关方面的数据显示,目前,中国还是全世界第一人口大,那么...
网文资讯

快递到付是什么意思(物流中到付是什么意思)

本报讯 收件人付款,很多寄收快递的人都经历过,快递行业把这种服务叫做到付。 无孔不入的骗子,也动起了到付的脑筋。 昨天上午,杭州网友羊贵妃就接到了快递员的电话,说有他的两个包裹,是到付件。一共46元,...
网文资讯

中国五大战区(七大军区变五大战区)

2017年4月,在我军新一轮的军队改革中,解放军陆军以原有的18个集团军为基础,重新调整组建了现有的13个集团军,这13大集团军的番号分别是第71、72、73、74、75、76、77、78、79、80...