自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Harrison的学习博客

众里寻他千百度,蓦然回首,那人却在灯火阑珊处。

  • 博客(298)
  • 问答 (3)
  • 收藏
  • 关注

原创 有序表之跳表

前言有序表按照设计思想分类的话,AVL树,SB树,红黑树属于上世纪设计思想;跳表属于本世纪设计思想,因为跳表的设计思想比上述实现有序表的结构更先进。但是跳表的常数项时间有点大。那么跳表还是搜索二叉树吗?用跳表实现有序表去增删改查它的时间复杂度也是LogN吗?回顾积压结构什么是积压结构,我的理解是不用频繁变动和扩容,ArrayList和HashMap都属于积压结构,还有SB树和红黑树,但是AVL树不属于积压结构。比如ArrayList动态数组,是以2^n方式来进行扩容。所以积压结构适合用在硬盘上,

2022-04-06 15:14:23 565

原创 有序表之SizeBalanceTree

SB树的平衡标准任何以叔叔结点的为头的子树的结点个数不小于任何一个以自己侄子为头结点的子树的结点个数。

2022-04-04 17:45:07 635

原创 有序表之AVL树

数据库中最重要的基础是索引,索引为什么能被建立起来,因为能建立索引的字段都是可以排序的,(任何字符串都可以排序)只是我们平时感受不深。排序是如何帮助加速找数据库里的东西的呢?在数据库里存数据的方式真的有可能是有顺序的。数据库里面硬盘结构可能就是有顺序的。底层数据写在硬盘上是顺序的,在底层数据之上建出一颗索引树。搜索二叉树单纯的加数据,找数据很容易,所以搜索二叉树本身就可以支持索引了,增删改查都在树上玩。但问题是,在最坏情况下,这棵树会退化成为链表。这个时候就引出了平衡搜索二叉树的概念:一棵树先保

2022-04-03 23:34:31 952 1

原创 AC自动机

package com.harrison.class22;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Queue;/** * @author Harrison * @create 2022-04-02-10:21 * @motto 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。 */public class Code03_ACAutomato

2022-04-02 11:42:48 161

原创 IndexTree2D——二维区域和检索 - 可变(前缀和)

package com.harrison.class22;/** * @author Harrison * @create 2022-04-02-9:58 * @motto 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。 */// 测试链接:https://leetcode.com/problems/range-sum-query-2d-mutable// 但这个题是付费题目// 提交时把类名、构造函数名从Code02_IndexTree2D改成NumMatrixpublic clas

2022-04-02 10:14:39 222

原创 IndexTree

package com.harrison.class22;/** * @author Harrison * @create 2022-04-02-9:39 * @motto 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。 */public class Code01_IndexTree { // 下标从1开始 public static class IndexTree{ private int[] tree; private int N;

2022-04-02 09:58:03 313

原创 线段树,,

线段树线段树解决的问题1.区间上的统一增加2.区间上的统一更新3.区间上的累加和统一查询任何一个结点 i 的父结点是 i/2,任何一个结点 i 的左孩子是 2i,右孩子是 2i+1,因为下标从1开始算,有点像堆。数组长度是2的几次方时候,最省空间,只需要准备2N长度的数组;数组长度是2的几次方+1的时候,最浪费空间,但也只需要准备4N长度的数组就可以了。左边可以得到某一个信息,右边可以得到某一个信息,父结点的信息可以由左右两个信息在O(1)时间内加工好,而且不用具体调研底层状况的,这一

2022-04-01 13:12:29 726

原创 Morris遍历

Morris遍历一种遍历二叉树的方式,并且时间复杂度O(N),额外空间复杂度O(1)。通过利用原树中大量空闲指针的方式,达到节省空间的目的。Morris遍历的关键利用一棵树上大量的右指针空闲空间Morris遍历细节假设来到当前节点cur,开始时cur来到头节点位置如果cur没有左孩子,cur向右移动(cur = cur.right)如果cur有左孩子,找到左子树上最右的节点mostRight :a. 如果mostRight的右指针指向空,让其指向cur,然后cur向左移动(cur =

2022-03-31 14:53:09 3628 1

原创 蓄水池算法

package com.harrison.class19;import org.w3c.dom.ranges.Range;/** * @author Harrison * @create 2022-03-31-8:29 * @motto 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。 */public class Code01_ReservoirSampling { public static class RandomBox{ private int[] bag;

2022-03-31 10:52:10 297

原创 KMP算法练习——TreeEqual

package com.harrison.class16;import java.util.ArrayList;/** * @author Harrison * @create 2022-03-30-14:52 * @motto 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。 */public class Code03_TreeEqual { public static class Node{ public int value; public Nod

2022-03-30 15:35:07 176

原创 KMP算法练习——旋转字符串

package com.harrison.class16;/** * @author Harrison * @create 2022-03-30-14:04 * @motto 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。 */public class Code02_IsRotation { public static boolean isRotation(String a,String b){ if(a==null || b==null || a.length()!=

2022-03-30 14:16:37 168

原创 manacher算法练习——AddShortestEnd

package com.harrison.class17;/** * @author Harrison * @create 2022-03-30-13:14 * @motto 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。 */public class Code02_AddShortestEnd { public static char[] manacherString(String s) { char[] str = s.toCharArray();

2022-03-30 13:51:57 135

原创 Manacher算法

package com.harrison.class17;/** * @author Harrison * @create 2022-03-30-10:59 * @motto 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。 */public class Code01_Manacher { public static int manacher(String s) { if (s == null || s.length() == 0) { retur

2022-03-30 11:27:00 555 1

原创 KMP算法

KMP暴力方法为何暴力?因为每个位置的尝试对后面位置的尝试都没有任何帮助,每个位置的尝试是独立的!了解KMP之前,先认识一种信息:前缀与后缀串的最长匹配长度K之前的字符串中,前缀跟后缀的最长相等长度,而且限定,前缀串不能取到整体,后缀串也不能取到整体。package com.harrison.class16;/** * @author Harrison * @create 2022-03-29-9:24 * @motto 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。 */publi

2022-03-29 13:08:52 783

原创 由斐波那契数列引述到矩阵快速幂技巧

求斐波那契数列矩阵乘法的方法1)斐波那契数列的线性求解(O(N))的方式非常好理解2)同时利用线性代数,也可以改写出另一种表示:|F(N),F(N-1)| = |F(2),F(1)| * 某个二阶矩阵的N-2次方3)求出这个二阶矩阵,进而最快求出这个二阶矩阵的N-2次方斐波那契数列的线性求解public static int f1(int n){ if(n<1){ return 0; } if(n==1 || n==

2022-03-28 13:06:12 467

原创 单调栈结构练习——子数组最小值的累加和

题目给定一个数组arr,返回所有子数组最小值的累加和。package com.harrison.class14;/** * @author Harrison * @create 2022-03-27-15:06 * @motto 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。 */public class Code06_SumOfSubarrayMinimums { public static int sumSubarrayMins(int[] arr){ int[

2022-03-27 16:59:11 258

原创 单调栈结构

单调栈是什么?一种特别设计的栈结构,为了解决如下的问题:给定一个可能含有重复值的数组arr,i位置的数一定存在如下两个信息arr[i] 的左侧离 i 最近并且小于(或者大于)arr[i]的数在哪?arr[i] 的右侧离 i 最近并且小于(或者大于)arr[i]的数在哪?如果想得到arr中所有位置的两个信息,怎么能让得到信息的过程尽量快。那么到底怎么设计呢?要求时间复杂度为O(N)package com.harrison.class14;import java.util.ArrayLi

2022-03-26 21:06:21 234

原创 滑动窗口内最大值或最小值的更新结构——窗口内最大值

题目假设一个固定大小为W的窗口,依次划过arr,返回每一次滑出状况的最大值例如,arr= [4,3,5,4,3,3,6,7], W= 3。返回:[5,5,5,4,6,7]。双端队列含义:窗口依次缩小的情况下,哪些位置的数会依次成为窗口内的最大值package com.harrison.class13;import java.util.LinkedList;/** * @author Harrison * @create 2022-03-25-13:07 * @motto 众里寻他千百度

2022-03-25 13:42:29 223

原创 从暴力递归到动态规划,记忆化搜索

动态规划暴力递归之所以暴力是因为存在大量的重复计算,比如一个很经典的问题——斐波那契数列。public static int fibonacci(int n) { if(n==1) { return 1; } if(n==2) { return 1; } return fibonacci(n-1)+fibonacci(n-2); }上面的试法,存在大量的重复计算,浪费时间。由此引出我们的动态规划,之前写了8篇暴力递归的文章,就是为了这个目的。因为动态规划就是某

2021-12-28 20:14:13 2997 25

原创 暴力递归——N皇后详解 && 如何用位运算进行优化

N皇后N皇后问题是指在N*N的棋盘上要摆N个皇后,要求任何两个皇后不同行、不同列,也不在同一条斜线上。给定一个整数n,返回n皇后的摆法有多少种。n=1,返回1。n=2或3,2皇后和3皇后问题无论怎么摆都不行,返回0。n=8,返回92...

2021-12-28 11:22:32 721 11

原创 图结构的实现,从点到边再到图

大家好,我是一名计算机专业的大三在校生,自不量力想明年秋招进大厂BATJMZ????????????。由于大学里面荒废了两年????,所以决定从此刻开始改变。希望通过写博客记录自己学习和成长的历程;同时也能够增长见识,学习到更多的知识,遇见更多志同道合的人????????????。本人目前还只是个青铜,希望和我的读者朋友们可以共同进步,一起探讨。如果我的文章能够帮到你的话,那实在是我的幸运,也希望我写的博客内容能够帮助一些在编程方面有问题的朋友。在这里如果你发现我写的有哪些不对或不足之处,请您谅解。你可以及

2021-12-20 15:32:40 580 14

原创 并查集结构

并查集增删改查时间复杂度为O(1)的结构目前学到的有哈希表跟并查集什么是并查集?1)有若干个样本a、b、c、d…类型假设是V2)在并查集中一开始认为每个样本都在单独的集合里3)用户可以在任何时候调用如下两个方法:boolean isSameSet(V x, V y):查询样本x和样本y是否属于一个集合void union(V x, V y) :把x和y各自所在集合的所有样本合并成一个集合4)isSameSet和union方法的代价越低越好,最好是O(1)补充1)每个节点都有一条往上指

2021-12-19 23:53:21 285 8

原创 贪心算法——安排最大会议数量

题目:一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目的宣讲。给你每一个项目开始的时间和结束的时间。你来安排宣讲的日程,要求会议室进行的宣讲的场次最多。返回最多的宣讲场次。方法一:暴力枚举,大概思路就是枚举每一个会议,如果遍历到的会议的开始时间晚于当前的时间点,说明这个会议可以举行。所以将其剔除掉。然后,剔除掉的会议的结束时间就是当前的时间点,剩下的会议都这么枚举,一定会有能安排的最大会议数量的可能性。 注意,因为会每次复制一个新的会议数组,所以不用remove来恢复现场。此方法只是为了测试贪心的

2021-12-18 23:10:17 1214 14

原创 二叉树的序列化和反序列化

可以用先序或者中序或者后序或者按层遍历,来实现二叉树的序列化用了什么方式序列化,就用什么样的方式反序列化但是,二叉树无法通过中序遍历的方式实现序列化和反序列化所以,二叉树可以通过先序、后序或者按层遍历的方式序列化和反序列化,不同的两棵树,可能得到同样的中序序列,即便补了空位置也可能一样。比如如下两棵树,补足空位置的中序遍历结果都是{ null, 1, null, 2, null}// __2// /// 1// .

2021-12-12 23:27:16 1329 9

原创 链表噩梦之一?5000多字带你弄清它的来龙去脉

前言:此题是链表里面的两大噩梦之一,另一个难题就是约瑟夫环。但是作者在自己理解的基础上,尽可能写明白,让读者能够理解~~~///(v)\\\~~~。题目:给定两个可能有环也可能无环的单链表,头节点head1和head2。请实现一个函数,如果两个链表相交,请返回相交的第一个节点。如果不相交,返回null。【要求】:如果两个链表长度之和为N,时间复杂度请达到O(N),额外空间复杂度请达到O(1)。分析题目情况分为以下几种:两个链表都无环一个有环一个无环两个都有环那么,首先我们要明确一点:两.

2021-12-08 15:12:38 810 22

原创 系统提供的堆 VS 手动改写堆

要求:在一个已经组织好的大根堆或者小根堆中,更改其中的某个值后,仍要求其为大根堆或者小根堆为啥系统提供的堆实现不了,因为系统提供的堆结构不会记indexMap这张反向表。但是如果系统增加了这张反向表,实现代价又会很高,而且系统也不确定你会不会用到这些功能,所以系统干脆不提供了,大量的情况就是这样。但是不排除某种语言中有这个功能(也就是有resign()这个方法),但是C++跟Java中是没有的,所以这种情况下需要自己手动改写堆结构!具体请看下面代码和运行结果吧!package com.harrison

2021-12-01 22:13:28 1004 10

原创 手写大根堆

用数组实现一个大根堆实现功能每给一个数加进数组后,自动调整为大根堆结构(heapInsert()方法)返回大根堆中的最大值,并且在大根堆中把最大值删除,且剩下的数,依然保持为大根堆结构(heapify()方法)自己手写一个大根堆结构 VS 纯暴力的方法,用对数器测试100万组!!!package com.harrison.class04;public class Code01_MaxHeap { public static class MyMaxHeap { private int[

2021-11-30 13:29:23 442 9

原创 随机快排时间复杂度是N平方?

数组分区—partition给定一个数组arr,和一个整数num,请把小于等于num的数放在数组左边,大于num的数放在右边。分析:设计一个<=区,该区域一开始在数组左侧,只用一个变量记录它的右边界,所以一开始<=区在下标为-1的位置,然后开始遍历数组(0,1,2…N-1)遍历规则:i位置的数[i] <= num:把当前数和<=区的下一个数交换,然后<=区向右扩一个位置,当前数跳到下一个(i++)[i] > num:什么也不干,直接i++题目升级将数组分

2021-11-29 22:27:37 803 6

原创 电脑商城项目总结

SpringBoot项目实战完整版。

2022-10-19 16:20:25 507 1

原创 头条面试真题——LightProblem

问题一是只有0位置才做决策,后续都是单分支,一条撸到死。问题二是只有0位置和1位置才做决策,后续也都是单分支…

2022-09-08 15:54:38 257

原创 排序链表,

水平有限,归并排序非递归的方法没弄出来,┭┮﹏┭┮。

2022-09-01 20:58:21 229

原创 LRU内存替换算法

【代码】LRU内存替换算法。

2022-09-01 20:54:13 406

原创 字符串转换整数 (atoi)

力扣链接:字符串转换整数 (atoi)

2022-06-26 11:41:45 260

原创 无重复字符的最长子串

力扣链接:无重复字符的最长子串子串问题(或子序列问题)规律总结:必须以i位置结尾怎样怎样 或者 必须以i位置开始怎样怎样;把每个位置的答案求出了,最终答案就是所有答案中的最大值子串跟子序列的区别:子串是必须连续的,子序列可以要求不连续这个题就只有两个因素影响如何记录上一个重复字符出现的位置呢?可以用一个map,也可以自己用数组代替map。(建议能不用map的情况下,就不用map。虽然map的增删改查时间复杂度是O(1),数组寻址比map查找,在常数时间上更快一点!下文会举例子测试)自己用数组代替map,数组

2022-06-25 13:49:34 196

原创 SpringBoot学习笔记(七)——邮件发送与SpringBoot其他框架

通过了解其他的SpringBoot框架,我们就可以在我们自己的Web服务器上实现更多更高级的功能。我们在注册很多的网站时,都会遇到邮件或是手机号验证,也就是通过你的邮箱或是手机短信去接受网站发给你的注册验证信息,填写验证码之后,就可以完成注册了,同时,网站也会绑定你的手机号或是邮箱。那么,像这样的功能,我们如何实现呢?SpringBoot已经给我们提供了封装好的邮件模块使用:邮件发送在学习邮件发送之前,我们需要先了解一下什么是电子邮件。电子邮件也是一种通信方式,是互联网应用最广的服务。通过网络的电子邮件

2022-06-25 09:41:33 599

原创 SpringBoot学习笔记(六)——Redis数据库

灵魂拷问: 不是学了MySQL吗,存数据也能存了啊,又学一个数据库干嘛?在前面我们学习了MySQL数据库,它是一种传统的关系型数据库,我们可以使用MySQL来更好地管理和组织我们的数据,虽然在小型Web应用下,只需要一个MySQL+Mybatis自带的缓存系统就可以胜任大部分的数据存储工作。但是MySQL的缺点也很明显,它的数据始终是存储在硬盘上的,对于我们的用户信息这种不需要经常发生修改的内容,使用MySQL存储确实可以,但是如果是快速更新或是频繁使用的数据,比如微博热搜、双十一秒杀,这些数据不仅要求服务

2022-06-23 18:05:41 1565

原创 SpringBoot学习笔记(五)——Git版本控制

注意: 开始学习之前,确保自己的网络可以畅通的连接Github:https://github.com,这个是一个国外网站,连起来特别卡,至于用什么方式实现流畅访问,懂的都懂。其实版本控制在我们的生活中无处不在,比如你的期末或是毕业答辩论文,由于你写得不规范或是老师不满意,你的老师可能会让你改了又改,于是就会出现下面这种情况:我们手里的论文可能会经过多次版本迭代,最终我们会选取一个最好的版本作为最终提交的论文。使用版本控制不仅仅是为了去记录版本迭代历史,更是为了能够随时回退到之前的版本,实现时间回溯。同时,可

2022-06-22 21:53:36 402

原创 SpringBoot学习笔记(四)——SpringBoot实现原理

注意: 难度较大,本版块作为选学内容,在开始前,必须完成SSM阶段源码解析部分的学习。但是博主本人之前只了解过一点SSM知识,打算后面再补相关知识。我们在前面的学习中切实感受到了SpringBoot为我们带来的便捷,那么它为何能够实现如此快捷的开发模式,starter又是一个怎样的存在,它是如何进行自动配置的,我们现在就开始研究。首先我们来看看,SpringBoot项目启动之后,做了什么事情,SpringApplication中的静态方法:套娃如下:我们发现,这里直接new了一个新的SpringAppl

2022-06-22 10:26:23 467

原创 SpringBoot笔记(三)——多环境配置与打包运行、再谈Spring框架

在日常开发中,我们项目会有多个环境。例如开发环境(develop)也就是我们研发过程中疯狂敲代码修BUG阶段,生产环境(production )项目开发得差不多了,可以放在服务器上跑了。不同的环境下,可能我们的配置文件也存在不同,但是我们不可能切换环境的时候又去重新写一次配置文件,所以我们可以将多个环境的配置文件提前写好,进行自由切换。由于SpringBoot只会读取或是文件,那么怎么才能实现自由切换呢?SpringBoot给我们提供了一种方式,我们可以通过配置文件指定:接着我们分别创建两个环境的配置文件

2022-06-21 21:20:12 746 1

原创 SpringBoot笔记(二)——日志系统

SpringBoot为我们提供了丰富的日志系统,它几乎是开箱即用的。我们首先要区分一下,什么是日志门面(Facade)什么是日志实现,我们之前学习的JUL实际上就是一种日志实现,我们可以直接使用JUL为我们提供的日志框架来规范化打印日志,而日志门面,如Slf4j,是把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接口,使用时只需要按照其提供的接口方法进行调用即可,由于它只是一个接口,并不是一个具体的可以直接单独使用的日志框架,所以最终日志的格式、记录级别、输出方式等都要通过接口绑定的具体的日

2022-06-21 19:49:59 378

空空如也

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

TA关注的人

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