7

如果最近你出去面试,不管是大厂还是小的创业公司,最后都会问你几个算法题。看似不怎么实用的算法,成为很多面试者的拦路虎,那对于算法,我们应该怎么面对,又有没有好的方法在短期内提升算法的解题能力呢?

对于这个问题,很难给出明确的答复。首先,算法确实很重要,它能将你和普通的程序员区分开来,助你拿到⼤⼚的 Offer。其次,算法更多的好处是隐性的、潜移默化的,会给你带来很多隐形的好处。很多时候,公司在招人的时候,会要求面试者除了经验丰富之外,还要求技术要好,基础扎实,熟练掌握算法和数据结构,这时候算法面试就显得尤为重要。

比如,我之前去面试过BAT、字节等大厂,到第二面一般都会问你一些算法题目,按照他们的说法,为什么要考算法呢?其实就是想看候选⼈是不是⾜够聪明。那如何看候选人是否聪明呢,那就是算法。在大厂的算法考核中,⼀般会分两步,第⼀步是直接让你说思路,第⼆
步是让你直接上⼿写代码。我之前面试过字节跳动的算法题,就是直接上手些代码,并且要能够运行成功,算法的难度⼀般不会太高,对应的大多数是 LeetCode 中级模式,所以如果你准备面试这些大厂,花时间学习算法是非常必要的。

很多技术⼤⽜都说过一句话,那就是【程序 = 数据结构 + 算法】,在我看来这话⼀点也不虚。我们写代码并不仅仅是为了把代码写出来,让它能运⾏就可以了。我们真正的⽬的
是⽤代码将逻辑正确地表达出来,这就是我们学习数据结构和算法的意义。另一方面,我们的⽬的是学习算法背后的思维和逻辑,建⽴时间复杂度、空间复杂度意识,写出⾼质量的代码,能够设计基础架构,从⽽提升编程技能,训练逻辑思维,提⾼核⼼竞争⼒,以此获得更多的⼯作回报,让职业⽣涯⾛得更顺更远。

说到这⾥,可能有⼈会说,我也清楚算法的重要性,但算法太难学了,之前也多次尝试⾃
学,但是找不到⾼效的学习⽅法,很难坚持下去,有时就算明⽩算法的知识原理,做题的时
候却始终找不到最优解,等等。

我只能说,算法学习也是有⽅法的,如果想要学好,必须要掌握正确的学习⽅法,建⽴⾃⼰
的算法知识体系。对于大多数开发者来说,算法并不需要学习的多深,但是一些基本的数据结构,如数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;以及一些基本的算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法等还是需要掌握的,如下图所示。

在这里插入图片描述
掌握了这些基础的数据结构和算法,再学更加复杂的数据结构和算法,就会非常容易,下面是五分钟学算法大佬收集的一些常见算法题,当然网上也有很多LeetCode的算法笔记。

1、复杂度分析

2、基本算法思想

3、排序算法

4、搜索

5、查找算法

6、字符串匹配

7、线性表

8、散列表

9、树

字典树概念与题型解析

面试官:为什么 MySQL 的索引要使用 B+ 树,而不是其它树?比如 B 树?

数据结构与算法——最小生成树

植树节,程序猿种的那些树

数据结构与算法——2-3-4树

数据结构与算法——2-3树

看动画轻松理解「Trie树」

10、图

浅谈什么是图拓扑排序

数据结构与算法——图论基础与图存储结构

数据结构与算法:三十张图弄懂「图的两种遍历方式」

数据结构与算法——图最短路径

总的来说,数据结构和算法可以有效的提升一个一个人的思维训练的过程,并且学习算法是一个持续的过程,所以需要做到持之以恒。


xiangzhihong
5.9k 声望15.3k 粉丝

著有《React Native移动开发实战》1,2,3、《Kotlin入门与实战》《Weex跨平台开发实战》、《Flutter跨平台开发与实战》1,2和《Android应用开发实战》