简介

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

先看几个经典算法面试题

  1. 字符串匹配问题
    1)有一个字符串 str1="“硅硅谷尚硅谷你尚硅尚硅谷你尚硅谷你尚硅你好”",和一个子串 str2=“尚硅谷你尚硅你”
    2)现在要判断str1是否含有str2,如果存在,就返回第一次出现的位置,如果没有,则
    返回-1
    3)要求用最快的速度来完成匹配
    4)你的思路是什么?
    思路一:暴力匹配,简单、效率低
    思路二:KMP算法,部分匹配表
  2. 汉诺塔游戏
    请完成汉诺塔游戏的代码:
    要求:
    1)将A塔的所有圆盘移动到C塔。并且规定,
    2)在小圆盘上不能放大圆盘,
    3)在三根柱子之间一次只能移动一个圆盘
  3. java数据结构与算法面试 java算法和数据结构面试题_java数据结构与算法面试

  4. 思路:分治算法
  5. 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例
    该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
  6. java数据结构与算法面试 java算法和数据结构面试题_算法_02

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

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

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

学习内容

案例

数据结构和算法介绍

一个五子棋程序介绍

稀疏sparsearray数组

数组压缩和解压

队列

场景展示及数组模拟

链表

单、双链表及应用实例


栈应用场景及实例

递归

递归场景

排序

八大排序算法

算法复杂度

时间与空间复杂度

查找算法

线性、二分、插值、斐波那契

哈希表

原理、实践


二叉树、顺序存储、线索化

树实际应用

堆排序、赫夫曼树及编码、二叉排序树、平衡二叉

多路查找

二叉树与B树、分治算法


深度优先

程序员10大算法

二叉、分治、动态规划、KMP、贪心、普里姆、克鲁斯卡尔、迪杰斯特拉、弗洛伊德、马踏棋盘

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

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