原创声明

本文作者:黄小斜

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

本文思维导图

什么是算法

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

比如数据结构里的数组,看似非常简单的数据结构,却可以支持很多复杂的算法,比如动态规划,比如DFS和BFS,再比如字符串算法、二叉树算法等等。那么算法到底是什么东西呢,不妨让我们来看看官方的介绍。

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

其实,算法的本质就是给你一组输入,运算之后给你一组输出,因此,算法帮人们解决很多问题把抽象的问题具体化,把一个问题转化成另外一个问题。

认识算法的N个阶段

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

第二次认识算法,还是在研究生期间找实习工作的时候,面试的时候总有一些关于算法知识的考察,这些算法题比之前自己学数据结构的时候要更难一些,比如要让你描述一下快排的过程,或者是二分查找的过程,由于是电话面试居多,一般都不会考察太复杂的问题。

第三次认识算法,是在面试了头条这类对算法要求极高的公司之后。当时我对这类公司的算法面试难度还没有足够的认识,几乎没有准备什么算法题就去参加面试了,头条不像其他公司,绝不是问一些类似快排这样的简单算法题敷衍了事,而是会直接掏出一道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和真题,不断训练自己的解题能力,强化自己的算法能力,在考前一个月甚至几个月保持这样的状态和解题手感,会让你在实战时发挥更加出色。

写在最后

如果觉得本文对你有帮助的话,请你也不要吝啬你的“好看”哈,转发朋友圈就是对我最大的支持啦,你们的支持是对我最大的鼓励。 对本系列文章有什么建议和意见,也欢迎留言告诉我,期待你的回馈。

啊哈算法2伟大思维闪耀时_五分钟学编程:怎样才能学好笔试面试最爱考察的算法...相关推荐

  1. 程序员笔试面试最爱考察的算法,到底怎么搞定?

    作者 | 黄小斜 责编 | 屠敏 本文思维导图 什么是算法 上回我们有一篇文章,讲述了作为一个新人程序员,如何学习数据结构这门课程,其实呢,数据结构和算法是息息相关的,为什么这么说呢,因为数据结构本身 ...

  2. leetcode 刷500道题,笔试/面试稳吗?谈谈算法的学习

    来源公众号:苦逼的码农 作者:帅地 想要学习算法.应付笔试或者应付面试手撕算法题,相信大部分人都会去刷 Leetcode,有读者问?如果我在 leetcode 坚持刷它个 500 道题,以后笔试/面试 ...

  3. 机器学习算法_五分钟了解机器学习十大算法

    本文为有志于成为数据科学家或对此感兴趣的读者们介绍最流行的机器学习算法. 机器学习是该行业的一个创新且重要的领域.我们为机器学习程序选择的算法类型,取决于我们想要实现的目标. 现在,机器学习有很多算法 ...

  4. 的一致性哈希_五分钟看懂一致性哈希算法

    作者简介: 华哥 10年+后端开发工作经验, 主要分享:关于java体系的知识,如:java基础知识/数据结算/算法,Spring/MyBatis/Netty源码分析,高并发/高性能/分布式/微服务架 ...

  5. python笔试编程题_Python自动化测试笔试面试时常见的编程题

    前言 随着行业的发展,编程能力逐渐成为软件测试从业人员的一项基本能力.因此在笔试和面试中常常会有一定量的编码题,主要考察以下几点. 基本编码能力及思维逻辑 基本数据结构(顺序表.链表.队列.栈.二叉树 ...

  6. java常用算法_五分钟记住Java常用的八种排序算法与代码实现

    1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数--直 ...

  7. python计算思维的概念_用Python学计算思维turtle详解

    Turtle 库是 Python 语言中一个很流行的绘制图像的函数库, 想象一个小乌龟, 在一个横轴 为 x .纵轴为 y 的坐标系原点, (0,0) 位置开始,它根据一组函数指令的控制,在这个平面坐 ...

  8. 面试时,一分钟自我介绍怎样才能出彩?

    自我介绍能反映你的性格.修养和沟通能力,也反映你的态度和诚意.这些信息直接影响别人对你的第一印象,进而影响到未来很长一段时间别人对你的认识与评价.所以千万你别小看了自我介绍,它可能影响着你的未来. 很 ...

  9. 五分钟学算法:前缀和系列

    今天我们来说一下刷题时经常用到的前缀和思想,前缀和和滑动窗口会经常用在求子数组和子串问题上,当我们遇到此类问题时,则应该首先想到此类解题方式,该文章会深入浅出描述前缀和,读完这个文章就会有属于自己的解 ...

  10. 12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用

    0.前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比 ...

最新文章

  1. 域中计算机设定重启,域中添加计算机设定的步骤
  2. SOA:惠普也要分块蛋糕
  3. bzoj 3365: [Usaco2004 Feb]Distance Statistics 路程统计【容斥原理+点分治】
  4. 2021年东南大学附属中大医院公布SCI预警期刊列表的通知
  5. 机器学习 缺陷检测_球检测-体育中的机器学习。
  6. mybatis generator 打印出来表了 但是没有生成未见_Python丨深度学习中使用生成器加速数据读取与训练...
  7. ssm框架搭建+easyui增删改查实现
  8. 终端编译opengl程序编译运行_ubuntu – 通过SSH编写opengl代码,通过机器显示运行程序...
  9. python计算函数转公式(转Latex公式)
  10. c++中的模板_C ++中的模板
  11. 批处理(bat)没有后缀的文件怎么复制?
  12. 机器学习: 最大似然估计 (MLE) 最大后验概率(MAP)
  13. 已处理证书链,但是在不受信任提供程序信任的根证书中终止 - Windows 7安装.Net Framework 4.7.2时出现此问题
  14. HTML5 汉字上方添加拼音标注 ruby、rp、rt
  15. mysqldump 快还是navicat快_剪辑软件评测:选喵影工厂、爱剪辑还是快剪辑?
  16. java会场安排问题_Cisco WebEx Meetings Server 常见问题解答15 发行版.PDF
  17. ubuntu 18.04安装 远程控制软件 TeamViewer 亲测有效简单
  18. 【综合类型第 8 篇】陆游和唐婉的故事
  19. 【OpenCV】-重映射
  20. 计算机夏令营英语面试,2016北航计算机夏令营的经验

热门文章

  1. WIN7X64SP1极限精简版by双心
  2. SOEM控制io超简洁程序
  3. Aqua Data Studio 执行HiveSql的问题
  4. VBto Converter代码转换工具最新V2.89版
  5. 用MATLAB画出双极性NRZ,[工学]通信原理MATLAB仿真教程第7章.ppt
  6. SQL Serever学习教程
  7. 基础算法|Java递归算法练习
  8. 介绍几款串口监控工具
  9. 软件设计开发笔记2:基于QT设计串口调试工具
  10. 5.3LNA的拓扑结构