自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 最长连续不重复子序列

核心思路: 遍历数组a中的每一个元素a[i], 对于每一个i,找到j使得双指针[j, i]维护的是以a[i]结尾的最长连续不重复子序列,长度为i - j + 1, 将这一长度与result的较大者更新给result。 对于每一个i,如何确定j的位置:由于[j, i - 1]是前一步得到的最长连续不重复子序列,所以如果[j, i]中有重复元素,一定是a[i],因此右移j直到a[i]不重复为止(由于[j, i - 1]已经是前一步的最优解,此时j只可能右移以剔除重复元素a[i],不可能左移..

2020-11-18 17:58:23 372

原创 归并排序(模板+分析)

模板void merge_sort(int q[], int l, int r){ if (l >= r) return;//递归结束条件 数组分到只剩下一个元素的时候,就结束该层递归,返回上一层 int mid = l + r >> 1; merge_sort(q, l, mid); merge_sort(q, mid + 1, r); // i = 0是错误的 //因为在递归的过程中 l , r ,mid在递归过程中是在不断变化的

2020-11-16 20:29:36 112

原创 快速排序(模板+几种情况)

版本一(y总的模板)void quick_sort(int q[],int l , int r) {if (l >= r) return;//递归结束的条件,只有一个数字or是空数组,结束该层递归int i = l - 1;//在while循环体中省略了i++;则需要在条件判断中先++i;所以这里减一int j = r + 1;//同理int x = q[(l + r) / 2];//可以取开头or随机取值or中...

2020-11-15 21:17:18 378

原创 背包问题(填表法 动态规划 代码分析)

要求达到的目标为装入的背包的总价值最大,并且重量不超出。解决类似的问题可以分解成一个个的小问题进行解决,假设存在背包容量大小分为1,2,3,4的各种容量的背包(分配容量的规则为最小重量的整数倍):package dynamic; /** * i是行,即表中的第几个物品 * j是列,即表中的各种容量的背包 * */public class...

2020-11-11 09:54:07 314

原创 kmp算法(思路分析+个人理解)

举例来说,有一个字符串 Str1 = “BBC ABCDAB ABCDABCDABDE”,判断,里面是否包含另一个字符串 Str2 = “ABCDABD”?1.首先,用Str1的第一个字符和Str2的第一个字符去比较,不符合,关键词向后移动一位5.遇到Str1有一个字符与Str2对应的字符不符合。6.这时候,想到的是继续遍历Str1的下一个字符,重复第1步。(其实是很不明智的,因为此时BCD已经...

2020-11-10 09:31:28 273

原创 马踏棋盘(骑士周游问题 思路分析及疑问分析)

所谓“马踏棋盘”问题,就是指在中国象棋的棋盘上,用马的走法走遍整个棋盘,在8*8的方格中,每个格都要遍历,且只能遍历一次。思路分析每一个马都有八个下一步的选择,我们在满足要求的点中任意找一个进行遍历,当八个点都不满足要求时,就回溯上一步,找其他点进行遍历。解决方法:我们从图中可以看到,一个位置的马可以有八个不同方向的下一步。如何表示下一步呢?设当前马的坐标为(x,y),则下一步为(x-2,y+1)、(x-1,y+2)、(x+1,y+2)、(x+2,y+1)、(x+2,y...

2020-11-06 11:15:18 1018

原创 弗洛伊德算法(floyd 代码分析)

代码思路的分析package floyd;import java.util.Arrays;public class FloydAlgorithm { public static void main(String[] args) { // 测试看看图是否创建成功 char[] vertex = { 'A', 'B', 'C', 'D', 'E', 'F', 'G' }; //创建邻接矩阵 int[][] ma...

2020-11-04 21:28:49 426

原创 狄杰斯卡尔(Dijkstra 最短路径 代码分析)

package dijkstra;import java.util.Arrays; /** * 代码思路: * 调用从顶点G开始 , graph.dsj(6); * 创建初始化 * */public class DijkstraAlgorithm { public static void main(String[] args) { char[] vertex = {'A'.

2020-11-04 09:35:38 505

原创 Prim(最小生成树算法 思路分析)

package prim;import java.util.Arrays; /** * 代码思路: * 1.创建图结构 MGraph graph = new MGraph(vertexes); * 2.创建最小生成树对象 MinTree minTree = new MinTree(); * 3.最小生成树对象调用createGraph,填充图的相...

2020-11-03 09:46:00 439

原创 Kruskal(最小生成树算法 思路分析)

package kruskal;import java.util.Arrays; /** *首先构造一个只含n个顶点的森林, * 然后依权值从小到大从连通网中选择边加入到森林中,并使森林中不产生回路,直至森林变成一棵树为止 * * 本文代码思路: * 1初始化图,即将相关节点加入到 顶点数组 邻接数组,并计算有多少个边 public KruskalCase(char[] vertexes,in...

2020-11-03 09:12:06 176

原创 二叉排序树(思路分析+疑惑解析)

package binarysorttree; /** *二叉排序树:BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点, * 要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。 * 特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点(当前代码是把相同的值放入到右子结点) * * 二叉排序树的删除 * 第一种情.

2020-10-28 09:51:02 200

原创 哈夫曼树编码(最优二叉树 文本 文件的压缩与解压)

统计字符(其实这里是ASCII码的形式统计字符出现的权值(字符出现的字数)统计字符出现的权值(字符出现的字数)统计字符出现的权值(字符出现的字数)统计字符出现的权值(字符出现的字数))出现的字数/** * * @param bytes 接收字节数组 * @return 返回的就是 List 形式 [Node[date=97 ,weight = 5], Node[]date=32,weight = 9]......], */ private static List<Nod.

2020-10-23 21:40:26 652 3

原创 线索化二叉树以及遍历(根据图片分析 注意递归)

package tree.threadedbinarytree; /** *思路 * 看图 * */public class ThreadedBinaryTreeDemo{ public static void main(String[] args) { HeroNode root = new HeroNode(1, "tom"); HeroNode node2 = new HeroNode(3, "jack"); ...

2020-10-21 18:04:47 159

原创 顺序存储二叉树(使用数组存储二叉树,并且前中后遍历)

顺序存储二叉树的特点:顺序二叉树通常只考虑完全二叉树第n个元素的左子节点为 2 * n + 1 第n个元素的右子节点为 2 * n + 2第n个元素的父节点为 (n-1) / 2n : 表示二叉树中的第几个元素(按0开始编号 与数组下标保持一致)package tree;import java.util.Arrays; /** * 预备知识 * (1) * 1) 顺序...

2020-10-20 20:51:21 1042

原创 散列表查找(哈希表)的简单实现(员工信息管理)

package search.hashTable;import java.util.Scanner; /** * 哈希表的简单实现 员工信息管理 * * (1)注意:创建HashTab即数组时,不要只创建数组empLinkedListArray = new EmpLinkedList[size]; * empLinkedListArray数组中存放的是每条链表的头结点,如果忘记初始化在接下来的add中会出现空指针异常 * empLink.

2020-10-19 21:48:26 630

原创 散列表查找(哈希表)

通过查找关键字不需要比较就可获得需要的记录的存储位置。 这就是一种新的存储技术——散列技术。(把记录散布在每个数组上)散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f, 使得每个关键字key对应一个存储位置f(key) 。 查找时, 根据这个确定的对应关系找到给定值key的映射f(key) ,若查找集合中存在这个记录, 则必定在f(key) 的位置上。这里我们把这种对应关系f称为散列函数, 又称为哈希(Hash) 函数。按这个思想, 采用散列...

2020-10-19 20:39:00 622

原创 散列表的引入

有些数据不必每次都去数据库取数据,且每次查数据库,速度较慢,且数据库压力较大一般在数据库前加缓存层,比如redis,常用的数据放到缓存层中可以有多级缓存,多级缓存层自己写缓存层,使用哈希表,把数据加载到内存,把数据放到哈希表中数组+链表数组+二叉树散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函...

2020-10-19 20:37:56 69

原创 图片的引入

图片标签网页中引入图片网页是文本文件,里面只能包括字符,无法放图片和音频图片标签用于向当前页面中引入一个外部图片使用img标签引入外部图片,img是一个自结束标签属性:src 属性指定的是外部图片的路径可以引入网站的图片,也可以使用相对路径引入内部图片img属于替换元素(基于块和行内元素之间)显示的并不是img本身,而是显示的是超链接所引入的图片显示的外部引入的资源,内容被引入的图片替换了,所以称为替换元素alt属性是对图片的描述 这个...

2020-10-18 18:29:12 495

原创 音视频播放

音视频播放audio标签用来向页面中引入一个外部的音频文件音视频文件引入时,默认情况下不允许用户自己控制播放停止如何控制进度?添加属性controls,会出现音频的进度条,可以控制音乐属性autoplay 音频文件是否自动播放(火狐没有自动播放)、如果设置了autoplay,则音乐在打开页面时会自动播放(容易影响到用户体验,现在浏览器一般不会自动播放,播放过之后,再打开会自动播放比如音量较大,突然打开网页,可能会吓一跳)loop 音乐是否循环播放,音乐播...

2020-10-18 18:27:44 74

原创 语义化标签

html负责网页的结构所以在使用html标签时,应该主要关注的是语义,,而不是它的样式css可以控制样式,css负责表现标题标签:h1-h6一共有六级标签从h1-h6重要性递减,h1最重要,h6最不重要h1在网页中的重要性仅次于title标签,一般情况一个页面只会有一个h1h1相当于论文的标题一般情况下使用h1-h3,h4-h6当作普通标签使用块元素 对应的是 行内元素在页面中独占一行的元素称为块元素(block element)对应的是不独占一...

2020-10-18 17:52:40 312 1

原创 meta标签(以京东首页为例)

主要用于设置网页中的一些元数据,元数据不是给用户看的charset指定网页的字符集 name 指定数据的名称 content 指定数据的内容name = "keywords" , content = "前端,html,css"//这里指定了三个关键字keywords(不区分大小写)表示关键字,比如搜索引擎搜索网上购物两个字就会弹出来相应的购物网站,这是程序员写在meta里面相当于是搜索引擎为网站分类(根据网站的属性和作用)如果标签忘记了,可以看现成网站的源代码...

2020-10-18 17:37:45 340

原创 HTML的基本结构及标签作用(从一篇文章格式的引入)

这里是标签简介(html的框架结构)就像Java中 public static void main(String args[]){}等默认的这种结构,了解即可,不必每次重复写标签的作用:标识出网页中不同的内容每个内容都有对应的标签开始标签 结束标签<标签名> 需要修饰的文本</标签名>为了分辨开始和结束,结束的标签名是</标签名>开始和结束之间放的是修饰的内容-----------------------------...

2020-10-18 17:20:04 907

原创 斐波那契查找(二分法的改进,mid借助斐波那契数列计算)

package search;import java.util.Arrays; /** *为什么需要使用斐波那契数列? * 斐波那契数列指的是这样一个数列: *0,1,1,2,3,5,8,13,21,34,55(数组F) * 这个数列从第3项开始,每一项都等于前两项之和。 *比如temp = {1,8, 10, 89, 1000, 1234, 0, 0} =>...

2020-10-17 21:18:32 310

原创 插值查找(思路分析)

上面的1/2代表区间长度每次缩减一半,也就是控制区间缩减幅度的因子。二分查找并没有考虑数据中数值的情况,仅仅使用了数值是有序的这一信息插值查找(interpolation search)实际上是二分查找的改良版。现在,来看下述的数值有序且分布均匀数据:data = [1, 2, 3, 5, 6, 7, 10, 13, 14,, 17, 19 22, 23, 25, 27]为什么使用插值查找?如果搜索的目标是2,那么区间长度每次都缩减为一半合理吗?显然是...

2020-10-17 20:27:53 218

原创 二分搜索(返回单个下标及返回多个下标)(思路分析+疑惑解析)

思路及疑惑解析package search;import java.util.ArrayList;import java.util.List; /** *课后思考题: int arr[] = {1, 3, 5, 7, 9,9,9}; 当一个有序数组中, *有多个相同的数值时,如何将所有的数值都查找到,比如这里的 9 * * * 思路分析 * 前提 二叉搜素之前数组是排序好的,即多个相同数据的下标是连续..

2020-10-17 20:01:49 244

原创 基数排序(思路分析+疑惑解析)

本人看的韩顺平老师的数据结构与算法的视频,做的总结和笔记基本介绍思想及排序的过程基数排序需要注意的地方疑惑解析package sort;import java.util.Arrays; /** * 基数排序的思路: * (1) 将每个元素的个,十,百等位数取出,然后看这个数应该放在哪个对应的桶(一个一维数组),并根据其放入到相应的数组下标中 ...

2020-10-15 11:43:08 230

原创 希尔排序(选择排序的优化 思路分析+疑惑解析)

思路package sort;import java.util.Arrays; /** * 插入排序的缺点:当需要插入的数是较小的数时,后移的次数明显增多,对效率有影响 * 希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。 * * 希尔排序法基本思想: * 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序; * 随着增量逐渐减少,每组包含的...

2020-10-14 09:57:37 213

原创 迷宫问题(递归的应用)

package recursion;public class MiGong { static int count = 0; public static void main(String[] args) { // 先创建一个二维数组,模拟迷宫 // 地图 int[][] map = new int[8][7]; // 使用1 表示墙 // 上下全部置为1 for(int i = 0 ;i &l.

2020-10-13 21:59:27 122

原创 插入排序(思路分析+疑惑解析)

思路及疑惑后的思考解答package sort;import java.util.Arrays; /** * 插入排序(Insertion Sorting)的基本思想是: * 把n个待排序的元素看成为一个有序表和一个无序表 * 开始时有序表中只包含一个元素,无序表中包含有n-1个元素 * 排序过程中每次从无序表中取出第一个元素 * 把它的排序码依次与有序表...

2020-10-13 21:56:49 252

原创 冒泡排序(思路+疑惑解析)

过程分析思路及疑惑后的思考解答代码package sort;import java.text.SimpleDateFormat;import java.util.Arrays;import java.util.Date; /** * 思路: * 相邻的两个元素比较,如果不符合要求,就交换顺序 * 总结: * 1一共进行 数组的大小-1 次 大的循环 ...

2020-10-13 20:50:29 137

原创 选择排序(思路分析+疑问解析)

思路:原始的数组 : 101, 34, 119, 1第一轮排序 : 1, 34, 119, 101第二轮排序 : 1, 34, 119, 101第三轮排序 : 1, 34, 101, 119思路:1. 选择排序一共有 数组大小 - 1 轮排序2. 每1轮排序,又是一个循环, 循环的规则(代码)2.1先假定当前这个数是最小数2.2 然后和后面的每个数进行比较,如果发现有比当前数更小的数,就重新确定最小数,并得到下标2.3 当遍历到数组的最后时,就得...

2020-10-13 20:26:59 181

原创 快速排序(思路分析+疑惑解析)

它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。虽然快速排序称为分治法,但分治法这三个字显然无法很好的概括快速排序的全部步骤。因此对快速排序作了进一步的说明:挖坑填数+分治法:以一个数组作为示例,取区间第一个数为基准数。 0 ...

2020-10-13 15:24:31 168

原创 归并排序(思路分析+疑惑解析)

归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。合并的时候思路package sort;import java.text.SimpleDateFormat;import java.util.Arrays;import java....

2020-10-13 10:27:03 217

原创 递归的理解(结合八皇后问题)

假设我们用递归来算阶乘 f(n)f 里面用到了 f,怎么理解呢?很简单,把式子展开即可:先递进,再回归——这就是「递归」比喻的理解查字典的比喻挺好的。想象用一本纯英文词典查单词,要查某一个单词的意思,翻到这个单词时,看解释,发现解释中有一个单词不认识,所以,无法明白这个要查的单词是什么意思;这时,再用这本词典(函数本身)查那个不认识的单词,又发现查的第2个单词的解释中又有一个单词不认识,那么,又再用这本词典查第3个不认识的单词,这...

2020-10-07 21:21:20 79

原创 八皇后问题

思路分析1) 第一个皇后先放第一行第一列2) 第二个皇后放在第二行第一列、然后判断是否OK[即判断是冲突], 如果不OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适3) 继续第三个皇后,还是第一列、第二列……直到第8个皇后也能放在一个不冲突的位置,算是找到了一个正确解4) 当得到一个正确解时,在栈回退到上一个栈时,就会开始回溯,即将第一个皇后,放到第一列的所有正确解,全部得到.(栈递归完成后,会返回上一个栈,根据上一次的结果继续计算)5) 然后回头继续第一个皇后放第二列

2020-10-07 21:11:58 63

原创 中缀表达式转后缀表达式(含计算)

中缀表达式转后缀表达式思路分析计算思路分析运算符优先级的解释package stack;import java.util.ArrayList;import java.util.List;import java.util.Stack;public class PolandNotationTest { public static void main(String[] args) { //完成将一个中缀表达式转成后缀表达式的功能 //说明.

2020-10-06 11:52:07 98

原创 栈的应用计算器(实现多位数字的运算)

package stack;/*使用栈完成表达式的计算 思路 1. 通过一个 index 值(索引),来遍历我们的表达式 2. 如果我们发现是一个数字, 就直接入数栈 3. 如果发现扫描到是一个符号, 就分如下情况 3.1 如果发现当前的符号栈为 空,就直接入栈 3.2 如果符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符, 就需要从数栈中pop出两个数,在从符号栈中pop出一个符号,进行运算,

2020-09-30 21:30:10 522 2

原创 双向链表(更新了按照顺序插入结点)

```javapackage linkedlist;public class DoubleLinkedListDemo { public static void main(String[] args) { System.out.println("双向链表的测试"); // 先创建节点 HeroNode2 hero1 = new HeroNode2(1, "宋江", "及时雨"); HeroNode2 hero2 = new Her

2020-09-30 16:16:50 987

原创 约瑟夫环(环形单向链表)

package linkedlist;public class Josepfu { public static void main(String[] args) { CircleSingleLinkedList circleSingleLinkedList = new CircleSingleLinkedList(); circleSingleLinkedList.add(5); circleSingleLinkedList.showBoy();

2020-09-30 09:48:48 151

原创 双向链表

package linkedlist;public class DoubleLinkedListDemo { public static void main(String[] args) { System.out.println("双向链表的测试"); // 先创建节点 HeroNode2 hero1 = new HeroNode2(1, "宋江", "及时雨"); HeroNode2 hero2 = new HeroNode2(2

2020-09-30 09:46:49 59

空空如也

空空如也

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

TA关注的人

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