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、贪心、普里姆、克鲁斯卡尔、迪杰斯特拉、弗洛伊德、马踏棋盘

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

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

经验分享 程序员 微信小程序 职场和发展