五分钟自学编程:怎样才能学好笔试面试最爱考察的算法


äºåéèªå­¦ç¼ç¨ï¼ææ ·æè½å­¦å¥½ç¬è¯é¢è¯æç±èå¯çç®æ³

原创声明


本文做者:黄小斜程序员


转载请务必在文章开头注明出处和做者。面试


本文思惟导图



e759ee93b118a92aa6aa9ec5cfc8ecda.jpeg



什么是算法


上回咱们有一篇文章,讲述了做为一个新人程序员,如何学习数据结构这门课程,其实呢,数据结构和算法是息息相关的,为何这么说呢,由于数据结构自己只是一个载体,而在数据结构之上产生做用和输出价值的东西实际上是算法。算法


好比数据结构里的数组,看似很是简单的数据结构,却能够支持不少复杂的算法,好比动态规划,好比DFS和BFS,再好比字符串算法、二叉树算法等等。那么算法究竟是什么东西呢,不妨让咱们来看看官方的介绍。数组


根据百度百科的介绍,算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法表明着用系统的方法描述解决问题的策略机制。也就是说,可以对必定规范的输入,在有限时间内得到所要求的输出。一个算法的优劣能够用空间复杂度与时间复杂度来衡量。


其实,算法的本质就是给你一组输入,运算以后给你一组输出,所以,算法帮人们解决不少问题把抽象的问题具体化,把一个问题转化成另一个问题。数据结构


认识算法的N个阶段


我第一次遇到算法题,仍是在我考研复习数据结构的时候,那个时候我看到的算法题其实都是很基础的题目,好比把数组中的两个元素置换,把两个链表合并成一个,但对于我来讲已是颇有难度的事情了,那时候我连伪代码是什么都还不懂。数据结构和算法


第二次认识算法,仍是在研究生期间找实习工做的时候,面试的时候总有一些关于算法知识的考察,这些算法题比以前本身学数据结构的时候要更难一些,好比要让你描述一下快排的过程,或者是二分查找的过程,因为是电话面试居多,通常都不会考察太复杂的问题。ide


第三次认识算法,是在面试了头条这类对算法要求极高的公司以后。当时我对这类公司的算法面试难度尚未足够的认识,几乎没有准备什么算法题就去参加面试了,头条不像其余公司,毫不是问一些相似快排这样的简单算法题敷衍了事,而是会直接掏出一道BFS或者DFS让你作一作,并且常常不止是一道题。我只记得当时面试的时候,看了题目半个小时啥都没写出来,很是尴尬。学习


第四次认识算法,是在参加了一些公司的笔试以后。和笔试算法题相比,面试算法题简直是小巫见大巫,好歹面试题考察的仍是一些经典的算法,可能刷一刷剑指offer和LeetCode的简单或者中等题就能搞定了,可是笔试题就不必定的,出题人的思路千奇百怪,不少时候解法也很古怪。总体来看,一般笔试算法题的难度是最高的,特别是像字节跳动这种对算法有变态要求的公司,基本上算法题一道都写不上来。动画


算法学习之路


虽然我学习算法的道路一直不太顺利,可是想要进BAT大厂,算法不过关确定是不行的。所以,我对于上面每一个阶段的问题,都制定了一些对应的学习方案,让我应对每一个阶段的算法问题。网站


数据结构与算法


数据结构这门课,其实不少时候就是咱们的算法启蒙课,当初我是在考研的时候复习的,用的教材是《天勤数据结构》可是对于不考研的同窗来讲,我以为还有不少不错的书能够参考,好比《大话数据结构》学好数据结构是学好算法的基础,至于怎么学习数据结构,好比回去看看我们的上一篇文章,你就能够得知一二了。


直接上剑指offer


有了数据结构的基础打底以后,至少你在看算法题的答案时,也能大概看懂了。可是,数据结构里的那些算法,不少时候是不够用的。当你了解到《剑指offer》里这本书的算法是笔试面试常常要考的内容,再去看看这本书里题目的难度,你就会发现事情并不简单。


对于只有一点数据结构算法知识的同窗来讲,直接上剑指offer是有难度的,毕竟不少题目的解法你以前见都没见过,有的题目你看了答案也会很快忘记。


其实,这本书里大部分的题目都不会用到什么特别复杂的算法,可是不少题型你可能确实是第一次见过,刷题这件事情没有捷径。这个时候你能作的就是多作题作看几遍书,真正作到能把题目本身写一遍,才能算是掌握了这本书里的算法。


笔试题级别的算法怎么学


既然已经看完了剑指offer,是否是能够直接开始学习笔试题级别的算法了。且慢,我给你看同样宝贝。其实,剑指offer的那些算法,大部分都仍是在数据结构算法的范畴以内,而在现在的笔试面试题库里,还有不少的经典算法,这些算法题就要到LeetCode里才能施展拳脚了。


好比动态规划,深度优先、广度优先、回溯算法等等,这类算法题光靠本身想是想不出来的,由于这些题目的背后都是一些经典的算法和解题思路,你以前没见过的话,想破头也不可能想的出来。


而这些算法,我以前也一直没找到合适的学习方式,老是东一榔头,西一棒子,看一些碎片化的文章来学习。直到后来我看到了基本还不错的算法书,好比《图解算法》以及《啊哈算法》把一些比较有难度的经典算法都作了介绍和讲解,固然了,如今还有不少的算法爱好者会作一些这类算法的分享,好比五分钟学算法的算法动画,程序员小灰的漫画算法,都是比较出色的例子。


搞定LeetCode和真题


最后一步,可能也是最关键的一步,就是要进入算法题库的最高殿堂,LeetCode了,这个刷题网站想必不少同窗都据说过,特别是有志于进入互联网大公司的同窗,这个是必知必会的。


LeetCode的题库有很是多的题目,但我其实也只刷了150道题而已,当初我跟着一篇LeetCode刷题指南完成了刷题,详见:,当时我把不少常考类型的题目都刷了一遍。其实,LeetCode的题目通常刷2-3遍是比较靠谱的,看到原题的时候要保证本身能作对。


再说说历年的笔试真题吧,现在不少互联网公司的笔试面试都在牛客网上进行,所以这些题目通常也都会收入到牛客网的真题题库中,这个时候,咱们就应该多去刷一刷这类题目,特鄙视你感兴趣公司的历年真题,最好都刷一遍,毕竟不少时候出题人也会偷懒去拿之前题目作修改,甚至直接照搬原题。


并且,这些互联网公司的算法真题通常都出的很特别,多作一些,你才能掌握这类题目的规律,正如数学题同样,必需要多作多练,才可以在实战时也保持镇定。


推荐资源


算法类的学习资源能够说是很是多了,这里我只推荐一些我以为还不错的资源,可是内容也不会少,够大家看很长一段时间的了。


数据结构方面的资源能够参考这篇文章,这里主要推荐算法方面的学习资源。


书籍


《算法图解》《啊哈算法》《剑指offer》不推荐《算法导论》即便盖方便面也有点重了


视频


《LeetCode刷题班》《直通bat算法刷题课》小甲鱼的一些经典算法课程


其余


五分钟学算法的算法动画程序员小灰的漫画算法LeetCode或LintCode


总结


关于算法的学习,今天就先讲到这里。其实咱们所讨论了算法学习方法更多地是面向笔试面试的,讲究的务实和高效,帮助你快速地了解要学习哪些内容,以及按照怎样的一个步骤去学习。


总体看来,先学好数据结构,而后用剑指offer强化练习,再去看一些算法书籍巩固基础,了解经典算法,最后上手LeetCode和真题,不断训练本身的解题能力,强化本身的算法能力,在考前一个月甚至几个月保持这样的状态和解题手感,会让你在实战时发挥更加出色。


对了,你想问我文章里提到的资源去哪找?我已经给你准备好了在个人公众号【程序员黄小斜】回复“算法”便可领取对应的下载地址。

相关文章
相关标签/搜索