自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 Java学习——算法——骑士周游(贪心优化)

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1、游戏介绍(1) 马踏棋盘算法也被称为骑士周游问题(2) 将马随机放在国际象棋的 8×8 棋盘 Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部 64 个方格2、代码实现(1) 马踏棋盘问题(骑士周游问题)实际上是图的深度优先搜索(DFS)的应用。(2) 如果使用回溯(就是深度优先搜索)来解决,假如马儿踏了 53 个点,如图:走到了第 53 个,坐标(1,0),发现已

2020-06-03 21:37:55 603

原创 Java学习——算法——Floyd算法(最短路径问题)

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1、算法介绍(1) 和 Dijkstra 算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978 年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名(2) 弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径(3) 迪杰斯特拉算法用于计算图中某一个顶点到其他顶点的最短路径。(4) 弗洛伊德算法 VS 迪杰斯特拉算法:迪杰斯特拉算法通过选定的被访问顶点,求出从

2020-06-03 17:49:34 507

原创 Java学习——算法——Dijkstra算法(最短路径问题)

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1、最短路径问题看一个应用场景和问题:(1) 战争时期,胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在有六个邮差,从 G 点出发,需要分别把邮件分别送到A, B, C , D, E, F 六个村庄(2) 各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里(3) 问:如何计算出 G 村庄到 其它各个村庄的最短距离?(4) 如果从其它点出发到各个点的最短距离又是多少?2、算法介绍迪杰斯特拉(Di

2020-06-03 15:48:01 429

原创 Java学习——算法——Kruskal算法(公交站问题)

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1、应用场景看一个应用场景和问题:(1) 某城市新增 7 个站点(A, B, C, D, E, F, G) ,现在需要修路把 7 个站点连通(2) 各个站点的距离用边线表示(权) ,比如 A – B 距离 12 公里(3) 问:如何修路保证各个站点都能连通,并且总的修建公路总里程最短?2、算法介绍(1) 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。(2) 基本思想:按照权值从小到大的顺序选择 n-1 条

2020-06-02 22:49:40 257

原创 Java学习——算法——Prim算法(修路问题)

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1、应用场景-修路问题看一个应用场景和问题:(1) 有胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在需要修路把 7 个村庄连通(2) 各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里(3) 问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短? 思路: 将 10 条边,连接即可,但是总的里程数不是最小.正确的思路,就是尽可能的选择少的路线,并且每条路线最小,保证总里程数最少.2、最小

2020-06-02 16:36:53 747

原创 Java学习——算法——贪心算法(集合覆盖)

1、应用场景假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号2、介绍(1) 贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法(2) 贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果3、集合覆盖问题(1) 假设存在如下表的需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有

2020-06-01 22:53:26 582

原创 Java学习——算法——KMP算法

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1、算法介绍(1) KMP 是一个解决模式串在文本串是否出现过,如果出现过,最早出现的位置的经典算法(2) Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP 算法”,常用于在一个文本串 S 内查找一个模式串 P 的出现位置,这个算法由 Donald Knuth、Vaughan Pratt、James H. Morris 三人于 1977 年联合发表,故取这 3 人的姓氏命名此算法.(3) KMP 方法算法就利用之前判断过

2020-05-31 23:10:04 222

原创 Java学习——算法——动态规划(01背包)

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1、应用场景背包问题:有一个背包,容量为 4 磅 , 现有如下物品(1) 要求达到的目标为装入的背包的总价值最大,并且重量不超出(2) 要求装入的物品不能重复2、算法介绍(1) 动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法(2) 动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。

2020-05-31 13:41:44 218

原创 Java学习——算法——分治算法(汉诺塔)

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1、介绍(1) 分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……(2) 分治算法可以求解的一些经典问题 二分搜索 大整数乘法 棋盘覆盖 合并排序 快速排序 线性时间选择

2020-05-31 11:29:16 249

原创 Java学习——算法——二分查找非递归

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1、介绍(1) 前面我们的二分查找算法,是使用递归的方式,下面是二分查找算法的非递归方式(2) 二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找(3) 二分查找法的运行时间为对数时间 O(㏒₂n) ,即查找到需要的目标位置最多只需要㏒₂n 步,假设从[0,99]的队列(100 个数,即 n=100)中寻到目标数 30,则需要查找步数为㏒₂100 , 即最多需要查找 7 次( 2^6 < 100 &lt

2020-05-31 11:06:05 133

原创 Java学习——数据结构——图的遍历

1、图的遍历介绍所谓图的遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: (1)深度优先遍历 (2)广度优先遍历2、深度优先2.1 基本思想图的深度优先搜索(Depth First Search) 。(1) 深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点, 可以这样理解: 每次都在访问完当前结点后首先访问当前结点的第一个

2020-05-30 19:22:37 264

原创 Java学习——数据结构——图的概念和实现

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1、基本介绍1.1为什么要有图(1) 前面我们学了线性表和树(2) 线性表局限于一个直接前驱和一个直接后继的关系(3) 树也只能有一个直接前驱也就是父节点(4) 当我们需要表示多对多的关系时, 这里我们就用到了图。1.2举例说明图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:1.3常用概念(1) 顶点(vertex)(2) 边(edge)(3) 路径(4) 无向图(5)

2020-05-30 16:53:19 429

原创 Java学习——数据结构——多路查找树

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1、二叉树与B 树1.1 二叉树的问题分析二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树(1) 二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如 1 亿), 就存在如下问题:(2) 问题 1:在构建二叉树时,需要多次进行 i/o 操作(海量数据存在数据库或文件中),节点海量,构建二叉树时, 速度有影响(3) 问题 2:节点海量,也会造成二叉树的高度很大,会降低操作速度.1.2 多叉树(

2020-05-30 13:43:36 154

原创 Java学习——数据结构——AVL树

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1、说明二叉排序树可能的问题给你一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 并分析问题所在.左边 BST 存在的问题分析:(1) 左子树全部为空,从形式上看,更像一个单链表.(2) 插入速度没有影响(3) 查询速度明显降低(因为需要依次比较), 不能发挥 BST的优势,因为每次还需要比较左子树,其查询速度比单链表还慢(4) 解决方案-平衡二叉树(AVL)2、介绍(1) 平衡二叉树也叫平衡二叉搜索树(Sel

2020-05-30 12:35:12 298

原创 Java学习——数据结构——BST二叉排序树

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1、需求给你一个数列 (7, 3, 10, 12, 5, 1, 9),要求能够高效的完成对数据的查询和添加。2、解决方案分析2.1 使用数组数组未排序, 优点:直接在数组尾添加,速度快。 缺点:查找速度慢.数组排序,优点:可以使用二分查找,查找速度快,缺点:为了保证数组有序,在添加新数据时,找到插入位置后,后面的数据需整体移动,速度慢。2.2 使用链式存储-链表不管链表是否有序,查找速度都慢,添加数据速度比数组快,不需要数据整体移动。

2020-05-29 21:08:57 183

原创 Java学习——数据结构——Huffman编码以及文件解压缩

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1、基本介绍(1) 赫夫曼编码也翻译为 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式, 属于一种程序算法(2) 赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一。(3) 赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在 20%~90%之间(4) 赫夫曼码是可变字长编码(VLC)的一种。Huffman 于 1952 年提出一种编码方法,称之为最佳编码2、原理剖析(1)通信领域中信息的处理方式 1-定长编码

2020-05-28 17:06:55 510

原创 Java学习——数据结构——Huffman树

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1、介绍(1) 给定 n 个权值作为 n 个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。(2) 赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近2、重要概念和举例说明(1) 路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为 1

2020-05-27 15:13:54 166

原创 Java学习——数据结构——堆排序

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1、基本介绍(1) 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn),它也是不稳定排序。(2) 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。(3) 每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆(4) 大顶堆举例说明(5) 小顶堆举例说明(6) 一般升

2020-05-26 22:59:44 363

原创 Java学习——数据结构——线索化二叉树

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1、引子问题分析:(1) 当我们对上面的二叉树进行中序遍历时,数列为 {8, 3, 10, 1, 6, 14 }(2) 但是 6, 8, 10, 14 这几个节点的 左右指针,并没有完全的利用上.(3) 如果我们希望充分的利用 各个节点的左右指针, 让各个节点可以指向自己的前后节点,怎么办?(4) 解决方案-线索二叉树2、基本介绍(1) n 个结点的二叉链表中含有n+1 【公式 2n-(n-1)=n+1】 个空指针域。利用二叉链表

2020-05-26 17:11:17 215

原创 Java学习——数据结构——顺序存储二叉树

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1.概念从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组, 看下面的示意图。2.要求(1) 右图的二叉树的结点,要求以数组的方式来存放 arr : [1, 2, 3, 4, 5, 6, 6](2) 要求在遍历数组 arr 时,仍然可以以前序遍历,中序遍历和后序遍历的方式完成结点的遍历3.特点(1) 顺序二叉树通常只考虑完全二叉树(2) 第 n 个元素的左子节点为 2 * n + 1(3

2020-05-22 22:26:40 212

原创 Java学习——数据结构——二叉树的删除(简单实现)

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站要求(1) 如果删除的节点是叶子节点,则删除该节点(2) 如果删除的节点是非叶子节点,则删除该子树.(3) 测试,删除掉 5 号叶子节点 和 3 号子树.(4) 完成删除思路分析完整代码请查阅上一篇博文Node类//递归删除结点 //如果删除的是叶子结点,则删除该结点 //如果删除的是非叶子结点,则删除该子树 public void delNode(int no){ //当前结点的左结点不为空

2020-05-22 17:02:45 170

原创 Java学习——数据结构——二叉树的查找

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1.二叉树-查找指定节点要求(1) 请编写前序查找,中序查找和后序查找的方法。(2) 并分别使用三种查找方式,查找 heroNO = 5 的节点(3) 并分析各种查找方式,分别比较了多少次(4) 思路分析图解package com.Tree;/** * 二叉树的遍历 *///定义结点class Node{ private int no; private String name; private N

2020-05-18 23:10:09 163

原创 Java学习——数据结构——二叉树的遍历

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1.为什么需要树这种数据结构(1) 数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低。(2) 链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)。缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历) 。(

2020-05-18 16:50:16 337

原创 Java学习——数据结构——哈希表

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站1.基本介绍散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。Google 上机题2.1 有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址…),当输入该员工的id 时,要求查找到该员工的 所有信息.2.2 要求: 不使用数据库

2020-05-18 11:05:06 153

原创 Java学习——数据结构——斐波那契查找

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站基本介绍1.1 黄金分割点是指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比。取其前三位数字的近似值是 0.618。由于按此比例设计的造型十分美丽,因此称为黄金分割,也称为中外比。这是一个神奇的数字,会带来意向不大的效果。1.2 斐波那契数列 {1, 1, 2, 3, 5, 8, 13, 21, 34, 55 } 发现斐波那契数列的两个相邻数 的比例,无限接近 黄金分割值0.618原理斐波那契查找原理与前两

2020-05-15 17:42:41 162

原创 Java学习——数据结构——插值查找

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网址原理介绍1.1 插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找。1.2 将折半查找中的求 mid 索引的公式 , low 表示左边索引 left, high 表示右边索引 right.1.3 int mid = low + (high - low) * (key - arr[low]) / (arr[high] - arr[low]) ;/插值索引/1.4 举例说明插值查找算法 1-100 的数组

2020-05-15 17:36:28 148

原创 Java学习——数据结构——二分查找

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站二分查找请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。思路说明:增加了找到所有的满足条件的元素下标:课后思考题: {1,8, 10, 89, 1000, 1000,1234} 当一个有序数组中,有多个相同的数值时,如何将所有的数值都查找到,比如这里的 1000.package com.Search;import j

2020-05-14 14:32:33 185

原创 Java学习——数据结构——顺序查找

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此元素要求: 如果找到了,就提示找到,并给出下标值。package com.Search;/** * 线性查找 */public class SeqSearch { public static void main(String[] args) { int[] arr = {1,8,10,89,1000,1234};

2020-05-14 12:59:10 149

原创 Java学习——数据结构——基数排序

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站介绍1.1 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或 bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用1.2 基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法1.3 基数排序(Radix Sort)是桶排序的扩展1.4 基数排序是 1887 年赫尔曼·何乐礼发明的。它是这样实现

2020-05-13 16:55:01 207

原创 Java学习——数据结构——归并排序

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站介绍归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer) 策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。基本思想合并相邻有序子序列再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,

2020-05-13 12:50:27 162

原创 Java学习——数据结构——快速排序

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步添加链接描述介绍快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。示意图package com.Sort;import java.text.SimpleDateFormat;import java.util.Dat

2020-05-12 16:48:14 268 1

原创 Java学习——数据结构——希尔排序(两种思路)

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站简单插入排序存在的问题我们看简单的插入排序可能存在的问题.数组 arr = {2,3,4,5,6,1} 这时需要插入的数 1(最小), 这样的过程是:{2,3,4,5,6,6}{2,3,4,5,5,6}{2,3,4,4,5,6}{2,3,3,4,5,6}{2,2,3,4,5,6}{1,2,3,4,5,6}结论: 当需要插入的数是较小的数时,后移的次数明显增多,对效率有影响.介绍希尔排序是希尔(Donald Shell)于

2020-05-12 15:26:52 149

原创 Java学习——数据结构——插入排序

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网址介绍插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。思想插入排序(Insertion Sorting)的基本思想是:把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有 n-1 个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。思路pac

2020-05-12 11:16:57 191

原创 Java学习——数据结构——选择排序

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站基本介绍选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。排序思想选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从 arr[0]~arr[n-1]中选取最小值, 与 arr[0]交换,第二次从 arr[1]~arr[n-1]中选取最小值,与 arr[1]交换,第三次从 arr[2]~arr[n-1]中选取最小值,与 arr[2] 交换,…,第

2020-05-11 16:58:27 96

原创 Java学习——数据结构——冒泡排序及其优化

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站基本介绍冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。优化:因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志 flag 判断元素是否进行过交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排序写好后

2020-05-11 16:09:00 140

原创 Java学习——数据结构——递归实现八皇后问题

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站八皇后问题介绍八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848 年提出:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。八皇后问题算法思路分析(1) 第一个皇后先放第一行第一列(2) 第二个皇后放在第二行第一列、然后判断是否 OK, 如果不 OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适

2020-05-10 14:19:53 260

原创 Java学习——数据结构——递归实现迷宫问题

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步[网站](https://www.bilibili.com/video/BV1E4411H73v?p=46)主要分析都在代码注释里,在老师的基础上重构了并且可以简单的统计步数。package com.recursion;/** * 迷宫问题 * 说明 * 1、map 表示地图 * 2、x,y 表示起点 * 3、如果小球能到map[6][5]位置,则说明通路找到 * 4、0表示没有走过、1表示为墙、2表示通路可以走、3表示该点已经走过,

2020-05-10 13:02:04 326

原创 Java学习——数据结构——中缀表达式转换后缀表达式

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站后缀表达式适合计算式进行运算,但是人却不太容易写出来,尤其是表达式很长的情况下,因此在开发中,我们需要将 中缀表达式转成后缀表达式。具体步骤如下:初始化两个栈:运算符栈 s1 和储存中间结果的栈 s2;从左至右扫描中缀表达式;遇到操作数时,将其压 s2;遇到运算符时,比较其与 s1 栈顶运算符的优先级:4.1 如果 s1 为...

2020-04-01 16:40:09 298

原创 Java学习——数据结构——列表、栈实现逆波兰计算器(后缀表达式)

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站完成一个逆波兰计算器,要求完成如下任务:输入一个逆波兰表达式(后缀表达式),使用栈(Stack), 计算其结果支持小括号和多位数整数,因为这里我们主要讲的是数据结构,因此计算器进行简化,只支持对整数的计算。思路分析例如: (3+4)×5-6 对应的后缀表达式就是 3 4 + 5 × 6 - , 针对后缀表达式求值步骤如下:...

2020-03-31 23:13:37 183

原创 Java学习——数据结构——栈实现综合计算器(中缀表达式)

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站使用栈来实现综合计算器思路分析(图解)package com.Stack;//定义一个ArrayStack类表示栈class ArrayStack2{ private int maxSize;//栈的大小 private int[] stack;//用数组模拟栈 private int top = -...

2020-03-31 20:55:02 172

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除