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

2023-05-16

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

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

  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算法)和贪心算法,其中,贪心算法是用来进行优化的。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 生产者消费者模式代码实现

    生产者消费者模式 xff1a 不同种类的线程间针对同一个资源的操作 问题 xff1a A xff1a 如果消费者先抢到cpu的执行权 xff0c 就会去消费数据 xff0c 但是现在的数据是默认值 xff0c 没有意义 xff0c 应该等着
  • 转载 本机运行x程序出现:Can't open display 原因及其解决方法

    在Linux Unix类操作系统上 DISPLAY用来设置将图形显示到何处 直接登陆图形界面或者登陆命令行界面后使用startx启动图形 DISPLAY环境变量将自动设置为 0 0 此时可以打开终端 输出图形程序的名称 比如xclock 来
  • 另一种root方法,Android boot.img破解

    一 破解原理 nbsp nbsp nbsp Android手机获得Root权限 其实就是让 system和 data分区获得读写的权限 这两个分区的权限配置 一般在根分区的init rc文件中 修改这个文件可永久获得root权限 众所周知
  • BPMN基础元素及任务类型

    01 BPMN定义 BPMN xff08 Business Process Modeling Notation xff0c 即业务流程建模符号 xff09 xff0c 是一种流程建模的通用和标准语言 xff0c 用来绘制业务流程图 xff0
  • Python 程序出现ImportError: cannot import name 'is_string_like' 解决办法

    今天的一个project写了如下代码 xff1a from skimage import os xff0c transform 运行后报错 xff1a from matplotlib cbook import is string like
  • ASP.NET中主题的创建和应用

    1创建ASP NET网站 模板 gt 选择 添加ASP NET文件夹 下面的属性 xff0c 将主题名改为 xff1a mytheme xff1b 添加新建项选择 外观文件 xff0c 命名为TextBox 双击TextBox skin文件
  • canvas画波形图

    最近公司要在浏览器上加个波形图 xff0c 本人搞C 43 43 的 xff0c 不会html5 xff0c 在网上搜了半天没找到一个例子 xff0c 只好自己研究了 郁闷啊 画这个图主要用到html5的canvas xff0c 不多说 x
  • layer 弹框 cropper 裁剪上传图片,thinkphp 3 使用 CropAvatar.class.php

    最近要做一个上传裁剪图片功能 xff0c 但是网上收出来的东西 xff0c 知识点都是对的 但是就是没说清楚 xff0c 也无法连续起来用 经过自己整理出来的一套代码 xff0c 亲测可用 xff01 不用多说 xff0c 直接上菜 PS
  • 解决mysql登录出现10061的问题

    问题出现的原因 xff1a 可能是系统自动关闭了mysql服务的运行 解决方法 xff1a 任务管理器 文件 运行新任务 services msc 找到mysql 启动即可成功 任务管理器 文件 运行新任务 services msc 找到m
  • Archlinux配置邮件(以qq邮箱为例)

    Archlinux配置邮件 以qq邮箱为例 安装s nail span class token function sudo span pacman S s nail 配置SMTP发送邮件 开启IMAP SMTP服务 打开qq邮箱网页版 gt
  • 电子爱好者总结的28个电子行业技术网站

    以下是一位电子爱好者总结的28个电子行业技术网站 21IC 电子 http www 21IC COM 中国电子资源网 xff1a http www ec66 com 中国电子进修网 http www studydz com 电子设计技术网
  • S_OK,S_FALSE,E_FAIL

    今天在调试一个ICOP的操作的时候 xff0c 发现连接被动关闭的时候老是会在一处断言处失败 xff0c 跟了很久终于发现了问题 在此记录一下 xff1a 断言报错的代码如下 xff1a HRESULT CIoCPWorker UnregI
  • Win7 应用程序无法正常启动(0xc000000d)的解决方法

    自从重装了WIN7系统后 xff0c VS2010编译出来的项目程序就不能正常启动 xff0c 启动的时候总是提示 应用程序无法正常启动 xff08 0xc000000d xff09 请单击 确定 关闭应用程序 在网上查找了很多解决方案 x
  • MySQL存储过程where条件执行失败的问题

    前几天对服务器实体做了属性缓存机制 xff0c 当时测试也没有出现大的问题 xff0c 昨天有人跟我说 xff0c 登陆的时候角色等级显示错误 xff0c 我复测了一下 xff0c 发现不只是等级错误 xff0c 进入游戏后角色位置 金钱
  • 程序员与厨师

    不管你信不信 反正我是信了 每一个程序员上辈子都是呆在厨房的厨子 好吧 你不信 我来证明给你看 1 下厨前 你得知道做的是早餐还是中晚餐 中晚餐的话 怎么也得走趟超市 如遇到好友聚会 怎么着也得做出一桌对得起朋友的饭菜 还有你得分析 朋友中
  • VS2010/VS2012 设置全局头文件和库路径

    在VS2010之前 xff0c 设置项目的全局头文件和库路径是非常方便的 xff0c 直接选择菜单Tools gt Options gt Projects and Solutions gt VC 43 43 Directories xff0
  • Linux下rz/sz安装及使用方法

    新搞的云服务器用SecureCRT不支持上传和下载 xff0c 没有找到rz命令 记录一下如何安装rz sz命令的方法 一 工具说明 在SecureCRT这样的ssh登录软件里 通过在Linux界面里输入rz sz命令来上传 下载文件 对于
  • 关于mysql存储过程创建动态表名及参数处理

    转载请注明出处 xff1a 帘卷西风的专栏 http blog csdn net ljxfblog 最近游戏开始第二次内测 xff0c 开始处理操作日志 xff0c 最开始把日志放到同一个表里面 xff0c 发现一天时间 xff0c 平均1
  • 关于mysql自增id的获取和重置

    转载请注明出处 xff1a 帘卷西风的专栏 http blog csdn net ljxfblog mysql获取自增id的几种方法 使用max函数 xff1a select max id from tablename 优点 xff1a 使
  • 关于SQL中Union和Join的用法

    转载请注明出处 xff1a 帘卷西风的专栏 http blog csdn net ljxfblog 一直以来 xff0c 对于数据库SQL方面都是半吊子水平 xff0c 能写一些基本的增删改查的语句 xff0c 大部分时间都是用下Where

随机推荐