自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JDK国内镜像下载以及环境变量配置

JDK国内镜像1.国内镜像2.Java环境变量配置Windows(以win10为例)Linux(以Centos7为例)1.国内镜像现在在甲骨文官网下载JDK不但访问慢下载慢,更让人难受的是还需要注册登录,因为最近换了几次开发环境,所以每次安装开发环境就会面临这样的问题,为了方便这里也是收录了几个国内JDK镜像,无需注册登录,国内网站响应快而且下载速度相比官网也是神速。1、华为JDK镜像地址:https://repo.huaweicloud.com/java/jdk/2、清华JDK镜像地址:htt

2021-01-19 09:41:06 2764

原创 springboot整合swagger时静态资源映射冲突问题

项目场景:最近没事做了一个类似于blog的Web项目,项目里用到了swagger,在开发过程中,发现springboot中的静态资源配置会和swagger的静态资源相冲突。问题描述:在引入了thymeleaf后发现页面的一些页面样式静态资源访问不到了,于是百度后发现需要对静态资源映射进行配置#静态资源映射配置spring.mvc.static-path-pattern=/static/**配置后发现页面样式果然好了,但是在访问swagger调试接口时发现页面访问不到了查看日志提示说是没有

2021-01-06 17:53:48 2993 2

原创 贪心算法以及简单示例Java实现

贪心算法一、基本概念二、算法步骤三、贪心算法解决集合覆盖问题代码实现一、基本概念  贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。也就是说,不从整体最优上加以考虑,做出的只是在某种意义上的局部最优解。二、算法步骤贪心算法一般按照如下步骤进行:建立数学模型来描述问题把待求解的问题分解位若干个子问题对每个子问题进行求解,得到局部最

2020-10-09 15:37:44 734

原创 字符串匹配之暴力匹配及kmp算法Java实现

KMP算法一、基本概念二、思路分析1.暴力匹配算法(不推荐):2.KMP算法(推荐)三、代码实现1.暴力匹配算法代码实现一、基本概念字符串匹配是计算机科学中最古老、研究最广泛的问题之一。一个字符串是一个定义在有限字母表∑上的字符序列。例如,ATCTAGAGA是字母表∑ = {A,C,G,T}上的一个字符串。字符串匹配问题就是在一个大的字符串T中搜索某个字符串P的所有出现位置。其中,T称为文本,P称为模式,T和P都定义在同一个字母表∑上。  对于字符串匹配问题,我们最直接能想到的就是暴力匹配,由于暴

2020-10-09 11:16:59 415

原创 动态规划算法以及0/1背包问题Java实现

动态规划算法一、基本概念二、算法步骤及问题举例三、动态规划解决0/1背包问题代码实现一、基本概念动态规划算法的核心思想是:将大问题划分为小问题进行解决,从而一步一步获得最优解的处理算法。动态规划算法与分治算法类似,其基本思想也是将代求问题分解成若干子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治算法不同的是,适合于动态规划求解的问题,经分解得到的子问题往往不是互相独立的,即下一个子阶段的求解过程是建立在上一个子阶段的解的基础上,进行进一步的求解。二、算法步骤及问题举例我们以一

2020-10-08 16:32:42 1161 1

原创 分治算法以及汉诺塔问题Java实现。

分治算法一、基本概念二、算法步骤即问题举例三、分治算法解决汉诺塔问题代码实现一、基本概念分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,

2020-10-08 10:40:15 171

原创 图的深度优先搜索以及广度优先搜索Java实现

图的深度优先搜索以及广度优先搜索一、基本概念1. 图的深度优先搜索(Depth First Search)2. 图的广度优先搜索(Board First Search)二、基本思路三、代码实现一、基本概念1. 图的深度优先搜索(Depth First Search)深度优先遍历,从初始访问节点出发,初始访问节点可能有多个邻接节点2. 图的广度优先搜索(Board First Search)二、基本思路三、代码实现...

2020-10-04 11:30:26 232

原创 图的基本介绍以及Java实现

图一、基本介绍二、代码实现一、基本介绍  图是一种非线性的数据结构,一般用它来反映数据所对应元素之间的几何关系和拓扑关系。图中包括可以具有零个或者多个相邻元素的节点(顶点),以及两个节点之间的连线——边,共同构成。在图的使用中,有以下一些常用概念需要了解。顶点(vertex):图的数据元素之一。边(edge):连接顶点的线。路径:从顶点v到v’的一个顶点序列。无向图:如果一个图结构中,所有的边都没有方向性,那么这种图便称为无向图。有向图:一个图结构中,边是有方向性的,那么这种图就称为

2020-10-03 12:19:16 302

原创 平衡二叉树(AVL树)Java实现

平衡二叉树(AVL树)一、基本概念二、思路分析三、代码实现一、基本概念平衡二叉树也称平衡二叉搜索树,又被叫做AVL树,可以保证查询效率较高。平衡二叉树的特点:它是一棵空树或者它的左右两个子树高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。图例:二、思路分析1. 平衡二叉树的构建:因为平衡二叉树本质也是一棵二叉排序树,所以我们可以使用旋转的方式来对平衡二叉树进行构建。当右子树高度-左子树高度>1时,我们利用左旋转来增加左子树的高度。如同所示的一棵二叉排序树,很明显,

2020-09-28 11:42:51 328 2

原创 二叉排序树(BST)的构建及基本操作Java实现

二叉排序树一、基本概念二、思路分析三、代码实现一、基本概念二叉排序树,又称二叉查找树,亦称二叉搜索树。对于二叉排序树,二、思路分析三、代码实现

2020-09-23 16:48:11 12616 1

原创 哈夫曼编码实现压缩与解压Java实现

一、基本概念二、思路分析三、代码实现

2020-09-14 16:27:49 828 3

原创 哈夫曼树Java实现

哈夫曼树一、基本概念二、思路分析三、代码实现一、基本概念  给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度(WPL)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。几个基本概念:路径和路径长度二、思路分析三、代码实现...

2020-09-12 11:02:53 618

原创 排序算法Java实现——堆排序

堆排序一、基本思路二、算法分析三、代码实现一、基本思路堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。基本思路:‘将待排元素构造成一个大顶堆,此时整个序列的最大值是堆顶的根节点,将其与末尾元素进行交换,此时末尾就为最大值,然后将剩余n-1个元素重新构造成一个堆,这样会得到n-1个元素的次小值,反复执行,便能得到一个有序序列。**简单来说:**就是循环执行两步:一、构

2020-09-11 17:38:33 100

原创 顺序存储二叉树及线索化二叉树Java实现

顺序存储二叉树及线索化二叉树一、基本概念二、思路分析三、代码实现一、基本概念二、思路分析三、代码实现

2020-09-11 16:38:49 167 1

原创 二叉树的遍历查找Java实现

二叉树Java实现一、基本概念二、思路分析三、代码实现一、基本概念1、二叉树二叉树(Binary tree)是树形结构的一个重要类型,二叉树(binary tree)是指树中节点的度不大于2的树。关于二叉树有以下术语需要了解:①结点:包含一个数据元素及若干指向子树分支的信息。②结点的度:一个结点拥有子树的数目称为结点的度。③叶子结点:也称为终端结点,没有子树的结点或者度为零的结点 。④分支结点:也称为非终端结点,度不为零的结点称为非终端结点。⑤树的度:树中所有结点的度的最大值。

2020-09-10 11:47:17 493

原创 哈希表java实现

哈希表一、基本概念二、代码实现一、基本概念散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。结构哈希表的结构可以使用数组+链表实现,

2020-06-10 17:36:33 3758

原创 查找算法java实现——斐波那契(黄金分割法)查找

斐波那契(黄金分割法)查找一、基本思路二、算法分析三、代码实现一、基本思路在介绍斐波那契查找之前,让我们先了解几个基本的概念:黄金分割点:是指把一条线段分成两部分,使其中一部分与全长之比等于另一部分与这部分之比,其比值保留三位小数约为0.618。由于按此比例设计的造型十分美丽,因此成为黄金分割,也称为中外比。斐波那契数列:{1,1,2,3,5,8,13,21,34,55…}即相邻两个数的和等于这两个数后面的数,通过计算我们可以发现,斐波那契数列中的两个相邻数的比例,无限接近黄金分割值0.618。

2020-06-09 11:24:48 539

原创 查找算法java实现——插值查找

插值查找一、基本思路二、算法分析三、代码实现一、基本思路插值查找,有序表的一种查找方式。插值查找是根据查找关键字与查找表中最大最小记录关键字比较后的查找方法。插值查找基于二分查找,将查找点的选择改进为自适应选择,提高查找效率。要注意的是:插值查找除了和二分查找一样要求查找表是顺序存储的有序表外,数据元素的关键字在查找表中最好均匀分布,这样,就可以按比例插值。基本思路: 插值查找的大体思路和二分查找是一样的,只是不再是递归的从序列的mid进行划分,而是将原来的:替换为:(相当于将原来的1/2替

2020-05-21 10:07:33 191

原创 查找算法java实现——二分(折半)查找

二分查找一、基本思路二、算法分析三、代码实现一、基本思路二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。基本思路: 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功

2020-05-10 18:48:10 617

原创 查找算法java实现——顺序(线性)查找

顺序查找一、基本思路二、算法分析三、代码实现一、基本思路顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法。基本思路: 就是依次遍历所给序列,如果存在元素与要查找的元素相同就返回该元素下标。简单来说: 就是从头到位一个一个的遍历序列,如果存在要查找的元素就记录返回其下标。二、算法分析时间: 因为需要从头到尾遍历待查找序列,所以顺序查找的平均时间复杂度为O(n)。空间: 顺序查找在查找过程中不需要额外开辟空间,所以空间复杂度为O(1)。算法平均时间最好情形最差情形

2020-05-10 17:44:07 449

原创 排序算法java实现——基数排序

基数排序一、基本思路二、算法分析三、代码实现一、基本思路(1)基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用(2)基数排序属于稳定性的排序(3)基数排序是桶排序的扩展(4)基数排序是1887年赫尔曼·何乐礼发明的,它是将整数按位数切割成不同的数字,然后按每个位数分别比较。基本思路: 基数排序是将所有待比较

2020-05-10 17:21:51 184

原创 排序算法java实现——归并排序

归并排序一、基本思路二、算法分析三、代码实现一、基本思路基本思路: 归并排序是利用归并的思想实现的排序方法,该算法采用经典的分治策略。先将待排序列分成若干个子序列,使每个子序列有序,再将已有序的子序列合并,得到完全有序的序列。简单来说: 就是将待排序列分成几部分每部分分别排序,再进行合并。举例:有一序列为:8, 4, 5, 7, 1, 3, 6, 2要求按升序排列先进行划分:(按照对半划分:下标mid = (left + right) / 2)(1)(8,4,5,7),(1,3,6,2)(

2020-05-09 12:50:55 274

原创 排序算法java实现——Shell(希尔)排序

希尔排序一、基本思路二、算法分析三、代码实现希尔排序是希尔(Donald Shell)1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的版本,也称为缩小增量排序。希尔排序是基于插入排序的以下两点性质而提出改进方法的:1.插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。2.但插入排序一般来说是低效的,因为插入排序每次只能将数据移...

2020-05-08 14:10:03 784

原创 排序算法java实现——插入排序

插入排序一、基本思路二、算法分析三、代码实现一、基本思路基本思路: 把n个待排序元素看成一个有序表和一个无序表,开始时有序表中只含有一个元素,无序表中包含n-1个元素,排序过程中每次从无序表中取出一个元素,把它依次与有序表中的元素进行比较,并插入到有序表的适当位置,使之成为新的有序表。简单来说: 就是从二、算法分析三、代码实现...

2020-05-08 11:48:14 122

原创 排序算法java实现——选择排序

选择排序一、基本思路二、算法分析三、代码实现一、基本思路基本思路: 第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到前n个元素都有序。简单来说: 就是从n个元素中先找出最小元素放到第一个位置,再从n-1个元素中找出最小元素放到第二个位置,以此类推,直到前n-1个位置确定。...

2020-05-07 19:51:01 174

原创 排序算法java实现——快速排序

快速排序一、基本思路二、算法分析三、代码实现一、基本思路基本思路是: 快速排序是对冒泡排序的一种改进。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分小,然后再按此方法对这两部分数据分别进行快速排序,整个过程可以递归进行。简单来说: 就是将待排序列不断的拆分成两部分,其中前半部分的所有数据都比后半部分小。举例:有一序列为:-9, 78, 0, 23, -5...

2020-05-07 13:06:55 130

原创 排序算法java实现——冒泡排序

冒泡排序一、基本思路二、算法分析三、代码实现一、基本思路基本思路: 将待排序序列从前向后扫描,依次比较相邻的元素,若发现相邻元素逆序,则交换位置,直到没有相邻的元素需要交换。简单来说: 就是依次找出待排序列中较大的元素放在序列较后的位置。举例:有一序列为:2,7,-2,18,9要求按升序排列先从左往右遍历,并且依次比较相邻的元素,如果是逆序就交换。第一趟比较(比较前n个元素,5个元...

2020-05-04 12:11:52 240

原创 递归java实现——基本思路及示例

递归算法一、基本概念二、基本思路三、代码示例(一)八皇后问题代码实现一、基本概念递归算法(英语:recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。计算理论可以证明递归的...

2020-05-03 16:10:20 556

原创 栈java实现(三)逆波兰(后缀)表达式及简单后缀计算器

栈的应用——逆波兰表达式一、逆波兰(后缀)表达式二、中缀表达式→后缀表达式1、思路分析2、代码实现三、简单逆波兰表达式计算器1、思路分析2、代码实现一、逆波兰(后缀)表达式逆波兰式(Reverse Polish notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后)定义一个表达式E的后缀形式可以如下定义:(1)如果E是一个变量或常量,则E的后缀式是E本身...

2020-04-21 12:20:21 512

原创 栈java实现(二)简单中缀计算器实现

一、思路分析  这里我们使用自定义的栈结构完成一个小练习:简单的不带括号的中缀表达式计算器的实现。分析思路如下:首先创建一个类来自定义栈结构以及所需要用到的一些基本方法。实例化两个栈来分别存放数字和符号。建立一个索引index来对中缀表达式进行遍历。开始扫描遍历表达式:如果是数,我们就查看表达式下一位 ,如果下一位也是数,就进行拼接操作,直到下一位不是数,然后将得到的数直接入栈。...

2020-04-20 10:57:03 256 2

原创 栈java实现(一)栈的基本使用

栈的基本使用一、基本介绍二、基本应用场景三、基本操作代码实现一、基本介绍栈(stack)作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。基本特性:栈是一个先入后出的有序列表。栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一点端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。栈按照先进后...

2020-04-12 11:10:36 867

原创 链表java实现(三)双向链表的基本使用

一、基本介绍双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。对比于单链表单向链表查找的方向只能是一个方向,而双链表可以向前或者向后查找单链表在删除节点时不能自我删除,需要依靠被删除节点的前一个节点来辅助删除,而双链表则可以自我删除。单链表在插入节点时只能在当...

2020-04-01 12:44:25 143

原创 链表java实现(二)单向循环链表基本使用及使用单向循环链表解决Josephu问题

单向循环链表一、基本介绍二、单向循环链表的使用三、Josephu(约瑟夫)问题1、问题分析2、代码实现一、基本介绍  顾名思义,在内存中单向循环链表就是将单链表的最后一个节点的next再指向单链表的第一个节点,在逻辑结构上就是将原来的一条链变成首尾相接的一个圆环,从而实现单链表的一个循环。如下图(此处为无头节点的单向链表):二、单向循环链表的使用1、定义单向循环链表基本结构class...

2020-03-31 19:12:30 245

原创 链表java实现(一)单链表的基本使用以及常见面试题

单链表一、基本介绍二、链表的使用三、常用操作1、求单链表中有效节点的个数2、查找单链表中的倒数第k个节点3、单链表的反转4、逆序打印单链表5、测试方法一、基本介绍链表是有序列表,但它在内存中各节点却不一定连续,单链表在内存中的存储如下:  由上图可知:链表以节点方式进行存储,是链式存储。每个节点包含一个data域和next域,data域用来存储数据,next域则用来指向下一个节点。...

2020-03-31 11:51:40 240

原创 数组模拟队列java实现

java数组模拟队列一、基本介绍二、数组模拟队列1、基本介绍2、代码实现3、存在的问题三、数组模拟环形队列1、优化思路分析2、代码实现一、基本介绍队列是一个有序列表,可以用数组或者链表实现。遵循先入先出的原则。即:先存入队列的数据,要先取出,后存入的要后取出。二、数组模拟队列1、基本介绍  队列本身是有序列表,若使用数组的形式来存储队列的数据,则队列数组需要声明如下几个变量:...

2020-03-30 16:57:14 185

原创 稀疏数组的基本使用以及写出读入

一、基本介绍1、概念  当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用过稀疏数组来保存该数组。2、稀疏数组存储的原理:(1) 记录数组一共几行几列,有多少个不同的值(2)把具有不同值的y元素的行列及值记录在一个小规模的数组中,从而起到缩小规模的作用例如:  一个大部分元素为0的二维的数组:[000220015011000170000−60000000039091000...

2020-03-30 11:54:08 130

空空如也

空空如也

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

TA关注的人

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