我对做算法题的一点点心得

2021/12/18 12:50:35

本文主要是介绍我对做算法题的一点点心得,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  我是在今年七八月份的时候,为了准备秋招,才开始我两个月的LeetCode刷题之旅。当时好像是在一个codetop的网站上,我把字节的所有高频题都刷过一遍(出现过两三次以上),刷完之后我信心满满地去投了简历,投完过了五分钟我刷新了一下网页——“已结束”(简历直接挂了),哈哈哈哈。

  后来无意间进了个实习(面试时甚至连算法都没问过),就直接停止再看LeetCode了。但因为自己当时确实是投入了很多去刷题,自己也有一点点心得,所以也才想在这里写些文章做个记录。在这里我想说一下我自己的看法:

  首先,千言万语汇成一句话:千万别把做算法题当成智力题、智商题。

  很多题目不是需要你去理解的,就是需要你去背的。但我说的不是背代码,是背每一种题背后常用的解法和套路,背的是套路

  一直以来我对刷算法题的误解都太大了,我一直以为要刷题要智力很好,很聪明,或者是我只要天天无脑刷题,做题,我就可以智商飞速提高,变得百毒不侵,什么题我都能做出来。

  同样的,你以为的那些ACM获奖者都智商超群吗,他们能以你看不懂的方式把你看不懂的题目做出来。不否认他们的智商是高,但绝对不至于通过智力与普通人拉开差距。他们归根到底就是“唯手熟尔”——他们有着大量的训练,能够很好地识别出哪些题用哪些方式,从递归到动态规划,从二分图到拓扑排序,再到后面你听都没听过的复杂算法……一类算法解决一类问题,大多数人,对于从来没有接触过的题目,纯靠智商其实也是做不出来的。所以有些算法难题你一看就看不懂或者毫无头绪,不是因为你笨,而是因为这个你看不懂的题就对应着一种算法套路,而这个套路你没听说过,所以你无法形成条件反射!

  有人会问:那照我这么说,所有人都去背题记套路,那面试算法还有什么意义?能考验出真实水平吗? 那就得看你怎么定义真实水平了。就像面试必问你的八股文一样,你觉得你会背那些东西算真实水平吗?这本身就没有标准说法。有的工作老油条笑一笑:这些就拿来面试考验考验基础!我自己都快忘光了,面试别人还得看着百度找题呢!有的人则严肃一点,义正言辞:这些都是计算机基础知识,基础不好怎么能走的长远呢!

  但可以确定的是,即使是告诉你了我面试要问八股文,算法要考这些套路,也绝对不是所有人都能准备到位的——那这就已经起到了筛选的效果了,不是吗?我认为问你一个三次握手也好,让你做道算法题也罢,就是看你有没有付出最基本的努力去熟悉和记住这些东西,有没有基本的智商去理解这些东西。因为大部分人可能连这一关都过不了。

  话说回来,如果一个面试官确实给连你出了两个你见都没见过的hard题,那你也不用怀疑自己,他就是对你有其他意见,不想再和你聊下去了。

  最近总结一些写过的题目,我越来越领悟出一个道理,就是人的大脑是真的无法永久记忆的,思维方式是很难永久改变的。曾经的我误以为LeetCode题目刷多了可以变得聪明、变得睿智,但实际上,刷题除了保持短期内对题目的熟悉和对套路的熟练之外,没有别的长期作用很久之后,该不会的题目还是不会——这也是我最近整理和总结我做过的这些题目的原因,因为恐怕再过几个月、一年,如果完全不碰这些算法题,那么可能连自己做过这些题的记忆都没了。有时我们在面试中遇到的题,面试官自己都不一定能一下子写出来——但这不代表他们以前不能,因为他们可能也有好几年没有写这些题了,这就是原因。所以对他们来说只需知道使用到你使用的算法是什么、复杂度,看你有没有ac就可以了。明年我可能要出国读研(如果申请上的话),如果这一年不再接触这些,再回来时脑海里刷过的这一点点LeetCode恐怕也灰飞烟灭了。(可见总结与复习,温故而知新是多么重要……)

  想做个总结,但是发现我想说的话在第一句(红字)就说完了。总之,希望通过这些文字表达我对刷题的看法,大部分所谓的难题并不是遥不可及的,你知道套路后就会感觉“不过尔尔”~  当然,“套路”说起来很容易,像金手指一般,但如何理解和掌握并灵活运用是需要我们去花时间和精力学习的——但那些只能算是“笨功夫”,并不需要我们有极高的智商才能做到——这个世界上依然有我们只要花笨功夫就一定能实现的事,是多么美好的现实~



这篇关于我对做算法题的一点点心得的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程