数据结构与算法(Java版) | 关于以上几个经典算法面试题的一个小结

Posted 李阿昀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法(Java版) | 关于以上几个经典算法面试题的一个小结相关的知识,希望对你有一定的参考价值。

为了让大家明白算法的重要性,以上我就列举了几个经典的算法面试题,我的目的也很简单,就是希望引起大家对算法的一个兴趣。

之所以在正式讲解数据结构与算法之前就引出这几个经典的算法面试题,是因为我想告诉大家如下三点。

  1. 算法非常重要。
  2. 算法非常有趣。
  3. 算法学习起来有一定的难度。

而且,从目前的情况来看,不会算法的程序员迟早会被逐渐淘汰,所以大家一定要对算法重视起来,要对它有一个足够的认识。而正是鉴于此,我才在前两讲中给大家列举了那几个经典的算法面试题。

接下来,我们不妨对前两讲中介绍的那几个经典算法面试题做一个总结,顺便复习复习一下。

字符串匹配问题

大家应该还记得我给大家介绍的第一个经典算法面试题吧!是不是就是字符串匹配问题啊!还有印象吧!

字符串匹配问题是这样描述的,说有这样一个字符串,即str1 = "阿阿昀 李阿昀你李阿 李阿昀你李阿昀你李阿你好",和另外一个子串,即str2 = "李阿昀你李阿你",现在要判断str1是否含有str2,如果判断存在,那么就返回str2子串在str1字符串中第一次出现的位置,如果没有,那么则返回-1,并且要求用最快的速度来完成匹配。

大家有兴趣不妨先想一想,如果这道算法题给到你,那么你会怎么做呢?

我想,如果你没有学过算法,例如KMP算法,那么一般来说你是会采用暴力匹配这种方式来进行解决的。但是,暴力匹配它有一个特点,就是简单但效率低下。

因此,要想解决该问题,那我们就得使用KMP算法了!至于KMP算法是如何来解决的字符串匹配问题,那就要留待以后再来为大家进行讲解了,因为这里一两句话也说不清楚。

汉诺塔游戏

然后,我给大家介绍的第二个经典算法面试题便是汉诺塔游戏了,还有印象吧!

关于汉诺塔游戏,我想下图应该可以大致描述出来。

总体来说,它的要求还是很简单的,如下:

  1. 将A塔的所有圆盘移动到C塔。可以看到,上图中A塔一共有5个圆盘,其实,圆盘的个数不止这么少,最多的时候有64个这么多。
  2. 并且规定小圆盘上不能放大圆盘。也就是说,在移动的整个过程中,大圆盘是不可以放在小圆盘上的。
  3. 此外,还规定在三根柱子之间一次只能移动一个圆盘。

之前我亲自给大家演示过如何来移动3个圆盘以及4个圆盘,还有印象吧!不过问题也就在这里,当要移动的圆盘的数量过多时,光靠我们人一步一步去移,那就会变得非常困难了,因为大脑可能都不能及时反应过来。

就拿上图中A塔要移动的5个圆盘来说,移动起来就会变得异常麻烦,你得先把A塔上面的4个圆盘移动到B塔,然后再把A塔最底层的那个圆盘移动到C塔,最后再把B塔上面的4个圆盘移动到C塔。那有童鞋就要问了,此时一共得需要移动多少步呢?一共得移动31步。为了让大家清楚地看到这一点,这里我写了一个自动演示搬盘子的小程序,下面我就用这个小程序来给大家演示一下5个圆盘是如何一步一步来移动的。

只是移动5个圆盘就需要31步,那假设现在要移动10个圆盘,或者20个圆盘,乃至更多,还能像上面这样靠人一步一步去移嘛?显然这是不可能的,所以这个时候算法的重要性就凸显出来了,也就是说,后面我们会使用算法来编程解决这个汉诺塔游戏问题,毕竟使用算法来解决还是一件比较轻松的事情。

八皇后问题

紧接着,我又给大家介绍了第三个经典的算法面试题,即八皇后问题,还有印象吧!

八皇后问题,是一个古老而著名的问题,而且还是回溯算法的一个典型案例。该问题是由国际西洋棋棋手马克斯·贝瑟尔于1848年提出的,即在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,也就是说任意两个皇后都不能处于同一行、同一列或同一斜线上,问一共有多少种摆法?

关于这个八皇后问题,相信大家多多少少都听说过,没听说过,总该看过我之前玩过的一把关于八皇后问题的小游戏吧!那个时候,我就摆出了92种摆法中的其中一种摆法。

最后,关于这个八皇后问题,我还想说一点,就是该问题需要使用到分治算法。当然,这里我也并不会去给大家细说,因为一两句话也说不清楚。

马踏棋盘算法

最后,我还给大家介绍了一个经典的算法面试题,即马踏棋盘算法,还有印象吧!

马踏棋盘算法是这样描述的,将马随机放在国际象棋的8×8棋盘Board[0~7][0~7]的某个方格中,然后再按照走棋规则(即马走日字,下过象棋的应该都知道马是走日字的吧!)进行移动,要求每个方格马只能允许进入一次,而且还得走遍棋盘上全部64个方格。

关于这个马踏棋盘算法,我之前在给大家讲述的时候,也给大家玩了一把这样的小游戏,只是那时没给大家演示一个完整的玩法而已,不过这没关系,因为后续我会专门来给大家详细讲解有关这个马踏棋盘算法的一切。

最后,我还想说一点,就是马踏棋盘这个问题最终会用到两种算法,即图的深度优先遍历算法(即DFS算法)和贪心算法,其中,贪心算法是用来进行优化的。

至此,以上我所列举的几个经典算法面试题就算是给大家回顾完了,之所以说这么多,就是希望大家能够激起或者燃起对数据结构与算法学习的一个兴趣,嘻嘻🤭,兴趣是最好的老师哟!

以上是关于数据结构与算法(Java版) | 关于以上几个经典算法面试题的一个小结的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法(Java版) | 关于以上几个经典算法面试题的一个小结

数据结构与算法(Java版) | 几个经典的算法面试题(下)

数据结构与算法(Java版) | 几个经典的算法面试题(下)

数据结构与算法(Java版) | 几个经典的算法面试题(下)

数据结构与算法(Java版) | 几个经典的算法面试题(上)

数据结构与算法(Java版) | 几个经典的算法面试题(上)