自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 notepad++ JSON Viewer插件手动安装失败解决方案

解压把 .dll文件放到plugins文件下【设置】—>>>【导入】—>>>【导入插件】—>>>选择.dll文件—>>>重启就ok了

2022-06-27 14:30:43 1736 2

原创 剑指 Offer II 050. 向下的路径节点之和

题目描述:给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。做题记录:...

2022-03-02 11:32:10 134

原创 剑指 Offer II 049. 从根节点到叶节点的路径数字之和

题目描述:给定一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。每条从根节点到叶节点的路径都代表一个数字:例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。计算从根节点到叶节点生成的 所有数字之和 。叶节点 是指没有子节点的节点。提示:树中节点的数目在范围 [1, 1000] 内0 <= Node.val <= 9树的深度不超过 10做题记录:dfs遍历附上代码:public class Solu

2022-03-01 16:17:29 252

原创 剑指 Offer II 048. 序列化与反序列化二叉树

题目描述:序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示:输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,也可

2022-02-28 14:50:38 90

原创 剑指 Offer II 047. 二叉树剪枝

题目描述:给定一个二叉树 根节点 root ,树的每个节点的值要么是 0,要么是 1。请剪除该二叉树中所有节点的值为 0 的子树。节点 node 的子树为 node 本身,以及所有 node 的后代。提示:二叉树的节点个数的范围是 [1,200]二叉树节点的值只会是 0 或 1做题记录:...

2022-02-25 11:23:34 489

原创 剑指 Offer II 046. 二叉树的右侧视图

题目描述:给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例 1:输入: [1,2,3,null,5,null,4]输出: [1,3,4]示例 2:输入: [1,null,3]输出: [1,3]示例 3:输入: []输出: []提示:二叉树的节点个数的范围是 [0,100]-100 <= Node.val <= 100 做题记录:1 借助队列做层序遍历,解题思路和44,45题一致。附上代码:

2022-02-25 11:13:21 281

原创 剑指 Offer II 045. 二叉树最底层最左边的值

题目描述:给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。示例 1:输入: root = [2,1,3]输出: 1示例 2:输入: [1,2,3,4,null,5,6,null,null,7]输出: 7 提示:二叉树的节点个数的范围是 [1,104]-231 <= Node.val <= 231 - 1 做题记录:1.借助队列做层序遍历,和44题的解题思路一样,只是让返回的内容不一样而已。附上代码:p

2022-02-24 17:40:52 608

原创 第11章 开发反应式API

1. 使用Spring WebFlux时间轮循机制(event looping)异步Web框架借助事件轮训机制能够以更少的线程处理更多的请求非阻塞、异步的Web框架1.1 Spring WebFlux简介1.2 编写反应式控制器返回单个值使用RxJava类型ObservableSingleCompletable 等价于Reactor中的MonoFlowable实现输入的反应式2.定义函数式请求处理器使用Spring的函数式编程模型编写API会涉及4个主要的类型:•Reques

2022-02-23 17:45:57 326

原创 剑指 Offer II 044. 二叉树每层的最大值

题目描述:给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。示例1:输入: root = [1,3,2,5,3,null,9]输出: [1,3,9]解释: 1 / \ 3 2 / \ \ 5 3 9 示例2:输入: root = [1,2,3]输出: [1,3]解释: 1 / \ 2 3示例3:输入: ro

2022-02-23 14:19:57 195

原创 剑指 Offer II 043. 往完全二叉树添加节点

题目描述:完全二叉树是每一层(除最后一层外)都是完全填充(即,节点数达到最大,第 n 层有 2n-1 个节点)的,并且所有的节点都尽可能地集中在左侧。设计一个用完全二叉树初始化的数据结构 CBTInserter,它支持以下几种操作:CBTInserter(TreeNode root) 使用根节点为 root 的给定树初始化该数据结构;CBTInserter.insert(int v) 向树中插入一个新节点,节点类型为 TreeNode,值为 v 。使树保持完全二叉树的状态,并返回插入的新节点的父节

2022-02-23 11:58:51 66

原创 剑指Offer II 042. 最近请求次数

题目描述:写一个 RecentCounter 类来计算特定时间范围内最近的请求。请实现 RecentCounter 类:RecentCounter() 初始化计数器,请求数为 0 。int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。保证 每次对 ping 的调用都使用比之前更大的 t 值。示例:输入:inputs = ["Re

2022-02-22 19:46:31 77

原创 Queue和Deque

QueuePriorityQueue:Object[]数组来实现二叉堆ArrayQueue:Object[]数组+双指针Queue和Deque的区别Queue是单端队列,只能从一端插入元素,另一端删除元素,实现了一般遵循先进先出(FIFO)规则。Queue扩展了Collection的接口,根据因为容量问题导致操作失败后处理方式的不同可以分为两类方法:一种在操作失败后会抛出异常,另一种则会返回特殊值。Queue接口抛出异常返回特殊值插入队尾add(E e)offer(E

2022-02-22 15:22:27 379

原创 剑指 Offer II 041. 滑动窗口的平均值

题目描述:给定一个整数数据流和一个窗口大小,根据该滑动窗口的大小,计算滑动窗口里所有数字的平均值。实现 MovingAverage 类:MovingAverage(int size) 用窗口大小 size 初始化对象。double next(int val) 成员函数 next 每次调用的时候都会往滑动窗口增加一个整数,请计算并返回数据流中最后 size 个值的移动平均值,即滑动窗口里所有数字的平均值。示例:输入:inputs = ["MovingAverage", "next", "nex

2022-02-22 11:54:28 77

原创 RabbitMQ-延迟队列

什么是延迟队列延迟队列存储的是对应的延时消息,“延时消息”是指当消息被发送以后,并不想让消费者立刻拿到消息,而是等待指定时间后,消费者才拿到这个消息进行消费。RabbitMQ 如何实现延迟队列AMQP 协议和 RabbitMQ 本身没有直接支持延迟队列功能,但是可以通过 DLX 和 TTL 模拟出延迟队列的功能。实现延迟队列需要创建两个队列,一个用于发送消息,一个用于消息过期后的消息转发的目标队列。RabbitMQ插件实现延迟队列...

2022-02-21 19:35:06 854

原创 10.4 反应式编程小结

反应式编程会涉及创建数据流经的处理管道反应式流规范定义了4种类型:Publisher,Subsciber,Subscription和Processor(是Publisher和Subsciber的结合)。Reactor项目实现了反应式流规范,将反应式流的定义抽象为两个主要的类型,即Flux和Mono,并为每种类型都提供数百个操作Spring 5利用Reactor提供了反应式控制器、repository,REST客户端以及其他反应式框架的支持。...

2022-02-21 18:24:10 119

原创 10.3 使用常见的反应式操作

根据对象创建如果你有一个或者多个对象,并想根据此创建Flux或者Mono,那么可以使用Flux或者Mono上的静态just()方法来创建一个反应式类型,他们的数据会由这些对象来驱动。订阅反应式类型就如同打开数据流的水龙头。subscribe()方法传递给subscribe()方法的lambda表达式实际上是一个java.util.Consumer,用来创建反应式流的Subscriber。在调用subscribe()之后,数据会开始流动。StepVerifier,断言验证根据集合创建Flux.f

2022-02-21 17:12:26 215

原创 剑指 Offer II 040. 矩阵中最大的矩形

题目描述:给定一个由 0 和 1 组成的矩阵 matrix ,找出只包含 1 的最大矩形,并返回其面积。注意:此题 matrix 输入格式为一维 01 字符串数组。示例 1:输入:matrix = ["10100","10111","11111","10010"]输出:6解释:最大矩形如上图所示。示例 2:输入:matrix = []输出:0示例 3:输入:matrix = ["0"]输出:0示例 4:输入:matrix = ["1"]输出:1示例 5:输入:mat

2022-02-21 13:51:21 189

原创 剑指 Offer II 039. 直方图最大矩形面积

给定非负整数数组 heights ,数组中的数字用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。示例 1:输入:heights = [2,1,5,6,2,3]输出:10解释:最大的矩形为图中红色区域,面积为 10示例 2:输入: heights = [2,4]输出: 4提示:1 <= heights.length <=1050 <= heights[i] <= 104做题记录:1.和38题

2022-02-19 21:53:04 124

原创 剑指 Offer II 038. 每日温度

题目描述:请根据每日 气温 列表 temperatures ,重新生成一个列表,要求其对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。示例 1:输入: temperatures = [73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,0]示例 2:输入: temperatures = [30,40,50,60]输出: [1,1,1,0]示例 3:输入: temperatures =

2022-02-19 20:32:21 7713

原创 剑指 Offer II 037. 小行星碰撞

题目描述:给定一个整数数组 asteroids,表示在同一行的小行星。对于数组中的每一个元素,其绝对值表示小行星的大小,正负表示小行星的移动方向(正表示向右移动,负表示向左移动)。每一颗小行星以相同的速度移动。找出碰撞后剩下的所有小行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。示例 1:输入:asteroids = [5,10,-5]输出:[5,10]解释:10 和 -5 碰撞后只剩下 10 。 5 和

2022-02-19 19:48:08 46

原创 剑指 Offer II 036. 后缀表达式

题目描述:根据 逆波兰表示法,求该后缀表达式的计算结果。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。逆波兰表达式:逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 ) 。该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * )

2022-02-18 14:02:39 43

原创 剑指 Offer II 035. 最小时间差

题目描述:给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。做题记录:1:时间点最多只有24 * 60个,所以当时间点多于24 * 60的时候,说明一定有重复的时间点,那么最小时间差为0;2:把24小时制的时间修改为分钟制,转换方程为分钟数=小时*60+分钟,然后对分钟数进行排序(从小到大排列)3:把最小的时间加上24 * 60,解决最大值和最小值之间差值的这种情况,比如[“23:59”,“00:00”];这一点非常巧妙,刚开始想的

2022-02-17 16:46:41 168

原创 剑指 Offer II 034. 外星语言是否排序

题目描述:某种外星语也使用英文小写字母,但可能顺序 order 不同。字母表的顺序(order)是一些小写字母的排列。给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在这种外星语中按字典序排列时,返回 true;否则,返回 false。做题记录:这一道题可以理解为排序字母的变种题目,如果说正常的排序题目是按照26个英文字母正常排序,那么“外星语言”则是有他们自己特殊的字母排序;在正常排序的时候,我们是按照字母的ASCII码来进行比较,那么在“外星语言的”环境下

2022-02-17 15:04:41 230

原创 剑指 Offer II 033. 变位词组

题目:给定一个字符串数组 strs ,将 变位词 组合在一起。 可以按任意顺序返回结果列表。注意:若两个字符串中每个字符出现的次数都相同,则称它们互为变位词。做题记录:做题前:本来不确定这一个字符串数组中是否包含相同的字符串,看了题解应该是不包括相同的字符串的;这样就容易多了1.使用Map数据结构,key是字符排序之后的String,value是一组变位词。2.遍历数组中的元素,对字符排序map中查找是否存在相应的key,如果存在直接取出value中的list,添加当前元素即可,如果不存在,则新

2022-02-15 16:16:15 236

原创 剑指 Offer II 029. 排序的循环链表

做题记录:提交了若干次才成功的一道题。如果链表是空链表,直接构造一个节点,指向自己,返回即可。如果链表非空,有可能是递增,也有可能链表中所有的值相等如果链表是递增的,值可能介于最大和最小值中间,也有可能小于最小值,也有可能大于最大值3.1 如果插入值介于最大和最小值中间,那么这种情况直接找>=前面的元素值并且<=后面的元素值的位置即可3.2 如果插入值小于最小值或者大于最大值,那么需要找到最小值和最大值的位置,并且把插入值插入这两个位置之间即可假如链表中所有的值相等,如果插入值等

2022-02-14 19:50:39 113

原创 hutool文档地址

hutool文档地址:https://hutool.cn/docs/#/excel导出:https://hutool.cn/docs/#/poi/Excel%E7%94%9F%E6%88%90-ExcelWriter

2022-02-14 15:01:07 1175

原创 mybatis foreach标签使用记录

<if test="dsIds != null and dsIds.size()>0" > and t1.dataset_id in <foreach collection="dsIds" item="item" open="(" close=")" separator=","> #{item} </foreach> </if>

2022-02-14 13:50:01 82

原创 剑指 Offer II 032. 有效的变位词

做题记录:solution1:使用两个长度为26的整数数组来记录字符出现的次数,最后判断两个整数数组是否相同;solution2:使用一个长度为26的整数数组,一个用++,一个用–,最后判断整数数组的每一位元素是否为0;solution3:将两个字符串转换为字符数组,对字符数组进行排序,然后判断两个字符数组是否相同。solution1代码:...

2022-02-11 11:49:00 317

原创 剑指 Offer II 027. 回文链表

做题记录:solution1:把链表内容保存到数组或者list集合中,使用双指针的方法判断solution2:快慢指针+链表反转+比较的方式判断附代码:public static boolean isPalindrome(ListNode head) { //快慢指针+反转链表 //1 2 3 2 1 //切割之后 1 2 3 / 2 1 //反转之后 1 2 3 / 1 2 或者把后面的放到栈中 //从头开始比较 if (head == null |

2022-02-10 17:19:12 228

原创 剑指 Offer II 026. 重排链表

做题记录快慢指针+反转链表+合并链表代码实现:public void reorderList(ListNode head) { if(head==null || head.next==null || head.next.next==null){ return; } ListNode pre = new ListNode(0, head); ListNode fast = pre, slow = pre; while (fast != null &

2022-02-09 19:14:34 176

原创 剑指 Offer II 025. 链表中的两数相加

做题记录solution1:直接计算出l1和l2数据之和,然后构造链表,这种情况可能会越界,因为列表的长度最长可以为100solution2:反转列表,然后从个位开始逐个相加solution3:不反转,使用栈使用solution2的思想实现了第一步:借助24题的实现反转l1和l2,p和q指针分别指向反转之后的l1和l2的首节点;第二步:构造变量catch,用来存储进位,在p != null 或者q != null 或者catch != 0的情况下计算节点数值和进位的和sum;第三步:构造节点L

2022-02-09 16:42:10 295

原创 剑指 Offer II 024. 反转链表

做题记录:使用迭代的方式反转构建节点pre=null, cur=head, next=head.next.先反转第一个节点,直接使当前节点指向pre,然后当前节点指向cur,cur指向next,next节点指向下一个节点。直到next节点指向null.初始化状态p c nn 1->2->3中间态p c nn<-1 2->3 p c nn<-1 2->3->null p c nn<-1<-2 3-&g

2022-02-09 15:15:29 292

原创 剑指 Offer II 023. 两个链表的第一个重合节点

做题记录方法1:使用map,把链表1的节点存放在map中,然后遍历链表2的节点,查找map中是否存在方法2:使用双指针两个指针分别指向两个链表的头结点假如链表A重合之前有a个节点,链表B重合之前有b个节点,两个链表重合的部分有c个节点,那么链表A的长度m=a+c,链表B的长度n=b+c同时,逐步后移两个指针,如果两个链表有重合节点,如果a=b,两个指针会同时到达重合节点;如果a!=b,当指针A指向null的时候,指向headB重新开始移动;当指针B指向null的时候,重新指向headA重

2022-02-09 11:50:52 323

原创 剑指 Offer II 021. 删除链表的倒数第 n 个结点

做题记录:1.本题使用双指针的思想2.非常巧妙的增加dummy节点,这样即使倒数第n个节点是head,也可以通用dummy节点的创建ListNode dummy = new ListNode(0,head);3.左右指针初始化,左指针指向dummy,右指针指向head;4.先将右指针右移n个节点5.之后,同时移动左右指针,直到右指针指向null6.这时候,左指针指向的是要删除的节点的前一个节点7.通过node.next=node.next.next把倒数第n个节点删除附上代码实现:pub

2022-02-08 18:11:10 175

原创 剑指 Offer II 020. 回文子字符串的个数

做题记录使用中心线法,有n个字符,则有2*n-1个中心线在中心线法的基础上使用双指针。左指针指向左边的字符,右指针指向右边的字符,如果左右指针指向的字符相同,则计数+1;并且作指针继续向左边移动,右指针继续向右移动,直到左右指针越界(左指针<0或者右指针>=字符串的长度)或者左右指针所指向的字符不相同。如果是以字母作为中心线,则默认有一个回文字符串,就是当前字符本身。附上代码:public static int countSubstrings(String s) {cha

2022-02-08 15:30:58 269

原创 剑指 Offer II 019. 最多删除一个字符得到回文

做题记录1.这是一道双指针题目2.左指针指向左边界,右指针指向右边界,判断左右指针所指向的字符是否相同。相同的情况下,移动左右指针;不相同的情况下,要么去掉左边指针所指向的字符,要么去掉右边指针所指向的字符,判断是否有能得到回文的情况,只要有1种情况能得到回文就符合要求。附上代码:public boolean validPalindrome(String s) { char[] chars = s.toCharArray(); int left = 0; int right

2022-02-08 14:56:55 370

原创 剑指 Offer II 018. 有效的回文

做题记录:去掉不合要求的字符判断去掉不符合要求的字符之后的字符串是否是回文字符串即可。判断是否是回文字符串的方法:可以使用StringBuffer的reverse方法,判断反转前后字符是否相等。...

2022-02-02 19:19:46 154

原创 剑指 Offer II 016. 不含重复字符的最长子字符串

做题记录这道题是使用滑动窗口实现的,滑动窗口边界的获取是通过哈希表获取的;这道题的难点是左边界的维护,需要保持滑动窗口中没有重复的字符,left = Math.max(left,map.get(s.charAt(i))+1),自己做的时候,只维护了left = map.get(s.charAt(i)+1),后来发现针对’abba’这种字符串是有问题的;不含重复字符的最长子字符串长度是通过ans = Math.max(ans,i-left+1)来获取的。...

2022-01-31 12:42:52 378

原创 剑指 Offer II 013. 二维子矩阵的和

做题记录添加辅助矩阵本题使用了二维前缀和的概念二维前缀和的计算sums[i+1][j+1] = sum + sums[i][j+1];如何通过二维前缀和矩阵得到二维子矩阵的和?假如左上矩阵的坐标为(i1,j1),右下矩阵的坐标为(i2,j2)那么通过sums[i2+1][j2+1] - sums[i1][j2+1]-sums[i2+1][j2]+sums[i1][j1]来得到子矩阵的和。...

2022-01-30 13:09:00 892

原创 剑指 Offer II 014. 字符串中的变位词

做题记录本题是字符串的题目,但是实际上使用了双指针的思想,有一篇题解写的非常棒,是对字符串的题目类型的总结,有时间的时候可以认真研究一下,转换为自己的东西;使用了双指针的思想,且双指针之间的长度固定;非常巧妙的进行了转化,将字符串->字符->整数将字符串转换为整数数组,转换为判断整数数组是否相同;这就是非常巧妙的使用了int[] nums = new int[26];注意细节的处理,最后不是直接返回false,而是返回Arrays.equals(array1,array2);因为如

2022-01-30 11:04:42 730

空空如也

空空如也

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

TA关注的人

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