Java 数据结构与算法1——几个经典算法面试题

简介

本文会介绍十大常用算法,二分查找(非递归)、分治、动态规划、贪心、KMP、马踏棋盘等

先看几个经典算法面试题

  1. 字符串匹配问题
    1)有一个字符串 str1="“硅硅谷尚硅谷你尚硅尚硅谷你尚硅谷你尚硅你好”",和一个子串 str2=“尚硅谷你尚硅你”
    2)现在要判断str1是否含有str2,如果存在,就返回第一次出现的位置,如果没有,则
    返回-1
    3)要求用最快的速度来完成匹配
    4)你的思路是什么?
    思路一:暴力匹配,简单、效率低
    思路二:KMP算法,部分匹配表

  2. 汉诺塔游戏
    请完成汉诺塔游戏的代码:
    要求:
    1)将A塔的所有圆盘移动到C塔。并且规定,
    2)在小圆盘上不能放大圆盘,
    3)在三根柱子之间一次只能移动一个圆盘
    在这里插入图片描述
    思路:分治算法

  3. 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例
    该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
    在这里插入图片描述
    思路:回溯算法。高斯认为有76种,图论的方法有92种。

  4. 马踏棋盘算法介绍和游戏演示
    1)马踏棋盘算法也被称为骑士周游问题
    2)将马随机放在国际象棋的8×8棋盘
    Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格
    3)游戏演示: http://www.4399.com/flash/146267_2.htm
    思路:图的深度优化遍历算法(DFS) +贪心算法优化

在学习算法之前,搞定数据结构!

数据结构分两大类,线性结构(栈、队列、链表)和非线性结构(图和树)。
接下来要学习的内容如下表所示:

学习内容案例
数据结构和算法介绍一个五子棋程序介绍
稀疏sparsearray数组数组压缩和解压
队列场景展示及数组模拟
链表单、双链表及应用实例
栈应用场景及实例
递归递归场景
排序八大排序算法
算法复杂度时间与空间复杂度
查找算法线性、二分、插值、斐波那契
哈希表原理、实践
二叉树、顺序存储、线索化
树实际应用堆排序、赫夫曼树及编码、二叉排序树、平衡二叉
多路查找二叉树与B树、分治算法
深度优先
程序员10大算法二叉、分治、动态规划、KMP、贪心、普里姆、克鲁斯卡尔、迪杰斯特拉、弗洛伊德、马踏棋盘

学习步骤:应用场景->数据结构或算法->剖析原理->分析实现步骤(图解)->代码实现

接下来会陆续更新学习笔记~~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值