目录
写在前面
最近比较忙,并且近期还要完成人生的一件大事,所以文章最近写的比较少,今天抽空整一篇,贵在坚持吧!
当你在这个行业摸爬滚打几年之后,或许你会像我一样感到迷茫,想进入大厂工作,当你真正去大厂面试的时候,你会发现所有大厂的面试都无可避免的会问到数据结构与算法相关的知识,这是为什么呢?这些东西真的有那么重要吗?为什么我平时也没用到不照样写项目吗?灵魂三连击啊,没办法,现实就是这么残酷。当然了原因其实也很简单,因为现在的计算机科学处于一个高速发展的时代,对于公司业务层面的日常开发都是依赖于各种开发框架、数据库软件、工具库等等,你觉得没用到,那是因为别人已经帮你搞好了,晓得了吧,而大厂面试并不是说看你能不能做业务,能做业务的人多了,凭什么选你呢,你是比别人长得好看吗?他们更多的是注重个人基础能力和未来的发展潜力以及对新知识的学习能力,所以没啥好抱怨的。
如果你大学是读计算机专业的,那么你肯定知道数据结构和算法是必学的课程,我不知道还是否有人记得,大学计算机基础里面对于程序的定义是什么?还有人记得吗?没错,程序 = 数据结构 + 算法,不信的话你可以回去翻翻看。
上面废话了这么多,就是想表明数据结构和算法的重要性(虽然我也不会,但是咱得有这个意识),所以我新开了一个专栏用来记录我的数据结构和算法的学习之路,下面这张图里面罗列了一些很重要的数据结构和算法,当然还有一块没有列出,有人能想到是什么吗?图论,它也是很重要的一块知识点,后面等学到了再单独介绍,大家可以看看这张图感受一下:
今天我们就从最简单的来看——线性查找,这个我相信99%的人应该都写过,所以难度等级---简单。
一、什么是算法
英文对应的单词是Algorithm,它的本意为:解决问题的方法,所以算法的直接理解就是解决问题的方法。在计算机领域定义的话就是:一系列解决问题的、清晰、可执行的计算机指令。
在我们的日常生活中,到处都是算法,它就在你身边,你却没发现,其实也不是没发现,只是你没给它定义为算法这个概念而已,举几个常见的栗子,比如:问路(如何去新街口)、菜谱(糖醋里脊这道菜怎么做),这些问题的解决方案都可以当做是一个小的算法。下面来简单了解一下算法的几个特性(了解即可):
算法的五大特性
- 有限性:在有限的时间内可以执行完成(有限的时间并不一定是非常短的时间)
- 确定性:不会产生二义性,描述该算法的每个指令的含义都是清晰的
- 可行性:算法中的每一步指令都是可行的
- 输入(输入输出在理解层面上是一种更加广义的概念)
- 输出
今天由于是第一篇,咱们来看一个最简单的算法:线性查找法。
二、线性查找法
2.1、实现线性查找法
线性查找法在生活中其实是很常见的,举个栗子吧:比如,你的书架上第一层有许多书,现在你想要从里面找到《编译原理》这本书,你会怎么找呢?通常你会从第一本开始看书名,如果是的就找到了直接拿出来,如果不是就继续下一本,以此类推,其实这样一个过程就是线性查找的过程。
下面我们就通过一个实际的案例,然后来看看实现这样一个线性查找,代码究竟该怎么写?
针对上面这个案例,相信大家立马就能想到该如何实现了?没错,就是一个简单的for循环,没啥好讲的,直接上代码了:
public class LinearSearch {
//私有