​搞定大厂算法问题,这样做更高效!

共 2744字,需浏览 6分钟

 ·

2021-09-21 06:46


前端猎手
 链接每一位开发者,让编程更有趣儿!
关注


转载自Duing(ID:duyi-duing


相信想要进入大厂的程序员们,没有一个能逃得过算法这一关。


算法俨然已经成为了面试考察的一种潮流,小渡采访过很多同学,不管是大厂还是小厂,都会考到算法题,基本每轮技术面都会涉及。面试前刷算法已经成为了一种心照不宣的默契。


但是,如何搞定算法呢?算法真的有那么难吗?如何学习才能起到事半功倍的效果呢?


今天,就让小渡带大家聊聊“令人头秃”的算法。





算法题,到底在考察什么?



算法题是面试中很让人头疼的一个部分,但这类涉及数据结构、算法的面试问题,考察公司却越来越多,甚至在小一点的公司中也开始受到欢迎。


是字节把算法带上了台面,所以大厂小厂都开始跟风考算法了嘛?其实与跟风无关,是越来越多的公司意识到了算法的重要性。一方面,算法是一种通用的考察点,不管你应聘哪个岗位都可以进行考察;而另一方面,算法包含了太多的逻辑思维,可以对你的思维能力进行全方位的考察。


而之所以同学们会对算法感到头疼,是因为它的两个主要难点——


第一,知识点类别多,涉及广泛,包括数组、链表、树、图、排序、贪心等等。


第二,知识点难度大,有些算法题目,真的让人连思路都找不到。


除此之外,最令人头疼的就是:明明刷了很多题,但是面试时看到算法题大脑还是一片空白。


算法题是无穷无尽的,如果没有掌握背后的规律,刷再多的题可能只是提高了熟练度。但万变不离其宗,算法题锻炼的其实是我们解决问题的能力,在面试中则意味着解题能力和逻辑思维能力。



1、 解题能力


在面试中,做对题目是最重要的,这主要是指——


1、 尽量快速写出题目代码,以规范为前提,尽量保证代码的优雅

2、 自己写测试用例,验证自己的程序,不断修正直到最后样例运行通过

3、 尽量找到最优解

4、 能够和面试官清晰地讲述运行思路,或者讨论可改进的点


记得要边思考边写,因为很多公司其实就是把做题的过程当作考察的流程,做出来了之后,简单讨论一下就可以通过了。


2、 逻辑思维能力


代码能力——如何用代码语言真正解决一个问题,运用好代码实现一个逻辑。


优化能力——也许一开始你得到的答案并不是最优解,但优化的过程,也可以让面试官看到你的思考和优化能力。


测试能力——主动跑测试用例是在实际工作中很重要的部分,也是面试中的重要考察内容。


试能力——这个不用多说了,写出bug不可避免,所以debug的能力就显得异常重要。


表达能力——这是刷题过程中很难触达的部分,所以平时在练习的时候,一定要仔细捋顺做题过程,并尝试着把思路说给小黄鸭听。


总而言之,做题的准确性和交流思路都是算法面试中的重要考察部分。


了解这些之后,下一步就是刷题了。





这样刷题,事半功倍



算法题库里的题目很多,但往往留给程序员们准备算法题的时间却不是很长。在这么短的时间内,如何让算法题目发挥最大的效果呢?


1、 刷题思路


在这里提供两种刷题思路——


第一种,如果你的准备时间比较少,单纯是为了面试而刷题的话,可以先刷热门推荐的题目,一共200多道,再刷精选TOP面试题,之后再刷其它的题。


第二种,如果你的时间比较充裕,那么可以先按从低到高的难度分组刷题,然后按tag分类刷题,尽量吃透每一个tag的内容。最后定期复习,重做之前刷过的题。



2、 刷题方法


新手阶段:思考,注重细节


刚刚接触算法题目时,我们要先思考,之后看参考答案并结合其他人的题解刷。思考、总结并掌握本题的类型以及思考方式,进行归纳总结,掌握最优解的解题方法,现阶段扣得越细,后期掌握得就越快。


量的话可以每一个专题完成60%Easy 的题目,选择并完成大概30%左右的Medium题目,Hard题目的话可以挑少量进行尝试,不过不用苛求。在这个阶段,刷题的重心在于确保自己理解每道题的解法。


快速提升阶段:大量刷题


在对算法比较熟悉之后,我们就需要大量地综合巩固我们的知识脉络和手感——大量刷题。在这个阶段,我们要确保每道题的解法都是最优的,并且能够快速的解答出来,也就是训练速度和准确度。


方法还是先思考,追求最优解的解法,并与之前自己写过的答案进行对比,总结问题和方法。练到拿出一个题就能知道它的考察重点、解题方法的程度,能够在短时间内得到清晰完整的解题思路并写出答案。


如果有余力的话,可以进一步注意自己的代码风格,比如变量命名、易读性等问题。建议每天先不停地刷easy,保持accept的节奏和速度,然后最后做几道medium收尾。


拔高阶段:举一反三


在拔高的阶段,我们要开始挑战难题,接触一些高级的算法和数据结构,比如线段树、矩阵乘法、网络流、代码量大的模拟题等等。


另外,思考题目可能的变形和扩展,在实际的面试中,经常会碰见被包装之后的原题,所以建立举一反三的思维非常重要。


最后总结复习,重点总结那些刷了好多遍都不会的题目,思考解决问题的方法,并把问题归类,针对一类问题总结解题方法和思路,哪种方法是最优解,不断向下追问为什么,不断改进优化。遇到不懂的问题就查,找学习资料和相关大神的解答,不要积攒问题。


另外,力扣的题目越往前越经典,而越经典的题目也越容易被考到,所以如果你的准备时间实在仓促,一定要学透前面的每一条经典题目噢。





达到这种程度,说明你刷到位了



题目刷得差不多了,那我们应该如何判断自己的实力呢?


假设在面试中遇到了一道算法题,我们这里可以简单地将解答分为四个级别:


第一个级别,我们磕磕绊绊或者靠着面试官的提示写出了正确的解法;


第二个级别,我们快速写出了正确的解法,能够完美应对所有的测试数据,包括可能的边角数据;


第三个级别,我们快速写出了正确的解法,并且写出来的是最优解法,一般题目对于时间复杂度考察比较多,这里默认是最优的时间复杂度;


第四个级别,我们的代码风格非常优美,变量名含义清晰,过程清楚明白,有一些简单的注释。


有时候我们可能发现面试的时候明明都写对了,最后还是没通过,这就有可能是你的代码风格没有让面试官满意。所以,在平时刷题的时候,我们也需要注意代码风格,最优解等等方面的问题,而不是以答对作为最终的目标。





写在最后



如果说学好算法有什么诀窍的话,那就是:多思考,常练习,搞懂算法的底层逻辑,才是我们需要着重培养的能力。


与此同时,我们也要结合底层逻辑进行大量的刷题训练,题目涉及种类尽可能广泛,从排序到二叉树、从树、图到动态规划等等,以达到量变向质变的转化。




😊 好了, 以上就是我的分享,小伙伴们点个赞再走吧 👍 支持一下哦~ 😘,


浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报