- 博客(59)
- 收藏
- 关注
原创 leetcode刷题(剑指offer) 47.全排列Ⅱ
的基础上使用Set数据结构进行去重。给定一个可包含重复数字的序列。返回所有不重复的全排列。
2024-02-29 23:05:07 344
原创 leetcode刷题(剑指offer) 46.全排列
*解法:**经典的深搜+回溯提醒,设计递归的时候主要考虑以下几个参数,t(指代当前路径的深度), path(存储路径节点的list)如上图所示,t代表路径的深度,也就是二叉树对应的层数,path用来收集可走的二叉树的节点。给定一个不含重复数字的数组。
2024-02-29 22:53:34 353
原创 上线服务时遇到的一个SSLHandshakeException错误
发生原因如下:在java8及高版本以上的环境调用ssl的时候会出现SSLHandshakeException这个错误。今天部署自己的一个程序,在本地是可以正常跑通流程了,但是部署到服务器上运行之后出现了如下错误。将其中的SSLv3, TLSv1, TLSv1.1都注释掉。需要修改jdk中的一个叫java.security的文件。然后重启java程序即可。
2024-02-28 09:41:27 544
原创 leetcode刷题(剑指offer) 297.二叉树的序列化和反序列化
这道题涉及到了二叉树的序列化与反序列化,由于序列化和反序列化的操作必须是可逆的,因此必须将完整的二叉树序列化(就是将叶子节点下面的节点也都序列化出来,序列化成两个null),这样反序列化之后的树才能是唯一的。序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。左边的数字表示这个节点的值在序列化之后的数组中的index,右边的数字表示这个节点的值。
2024-02-03 21:34:47 448 1
原创 leetcode刷题(剑指offer)138.随机链表的复制
本题难点在于random指针的不确定性,如果只是单纯的复制整个链表可以依次拷贝各个节点,然后修改指向,但是随着random指针的加入,我们无法确定,让random指向哪,因此想到使用hash表先将所有的节点映射起来。在复制链表的时候,我们可以获取到原始链表的random指向的节点,然后将这个节点作为key,从hash表中取出对应的值。指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。节点组成,其中每个新节点的值都设为其对应的原节点的值。返回复制链表的头节点。
2024-02-03 18:13:30 356
原创 leetcode刷题(剑指offer)113.路径总和Ⅱ
重复子问题:每次都在targetSum的基础上减去root.val,并递归执行左子树和右子树。在遍历的过程中记录出路径,当检测到当前抵达根节点时,判断路径和是否等于。递归的结束条件为:如果当前的root为空,直接结束。路径总和等于给定目标和的路径。是指没有子节点的节点。
2024-02-03 16:10:31 366
原创 leetcode刷题(剑指offer) 103.二叉树的锯齿形层序遍历
但是这种方法是不是太笨了呢,明明可以直接存好,还特意进行了依次翻转逻辑,所以参考了大佬的代码。类似,我则是在遍历的基础上加了方向的标志位,依靠判断方向的标志位,对数组进行翻转。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
2024-02-02 21:20:56 676
原创 leetcode刷题(剑指offer) 102.二叉树的层序遍历
先将root节点放入队列中,每次都弹出队头节点,取出节点,然后将取出节点的left节点和right节点依次放入到队列中,直到没有节点再能放入到队列中为止(即:队列为空)。本题是要层级遍历二叉树,将每层的所有节点都存入到list中。表示为下一层的最后一个节点,这个变量每次从队列中取出节点都会进行更新,当弹出节点等于。接替围绕着这两个点,首先可以使用队列来层级遍历每个节点,思路类似于。时,即可将一层的list存入总的list,且将。(即逐层地,从左到右访问所有节点)。表示为当前层的最后一个节点,
2024-02-02 20:38:09 474
原创 leetcode刷题(剑指offer) 946.验证栈序列
这题的思路是借用一个辅助栈来模拟push和pop操作,每次都将pushed中的元素放入到栈中,然后判断能否出栈,循环的弹出栈中元素,当所有入栈,出栈操作都完成之时,再判断栈是否为空,如果是空,那就说明push和pop满足栈的顺序,否则就是不满足。:每次入栈之后,循环判断,栈顶元素和popped的popIndex位置上的元素是否相等,相等即可出栈。,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回。两个序列,每个序列中的。:按照数组顺序,依次入栈。
2024-02-02 15:33:58 343
原创 leetcode刷题(剑指offer) 155.最小栈
左边黄色部分是栈中的val,右边绿色部分是当前栈中的最小值,最小值只需要在每次入栈的时候顺带更新一下,其时间复杂度也为o(1)。因此可以考虑到在保存栈中val值的时候,顺带保存当前栈中的最小值,如下图所示。获取最小值的方法的时间复杂度在O(1)级别,那就是说明,计算最小值的过程应该在。getMin出栈的时候,只需要弹出栈顶的最小值即可。操作,并能在常数时间内检索到最小元素的栈。
2024-02-02 13:57:56 372
原创 leetcode刷题(剑指offer)54.螺旋矩阵
本题使用了vis数组记录了走过的路径,设定初始移动方向为向右,如果不能再向右了那就切换方向为向下移动,判定条件为(当前格子已经走过了,或者数组越界了)。按照上述逻辑依次切换四个方向,当走完整个matrix的时候,vis会全部记录为true,此时,上下左右都无法移动,可以直接将结果返回。,返回矩阵中的所有元素。
2024-02-01 17:01:22 325
原创 leetcode刷题(剑指offer) 101.对称二叉树
有相似的思维,同为判断数的部分是否相等,区别则是,本题是判断左子树和右子树是否相等,而。**进阶:**你可以运用递归和迭代两种方法解决这个问题吗?是判断不同的两棵树是否相等,本题多了一个镜像翻转的逻辑。给你一个二叉树的根节点。, 检查它是否轴对称。
2024-02-01 16:27:21 383
原创 leetcode刷题(剑指offer) 226.翻转二叉树
递归函数中进行翻转,将翻转结果,返回给root的右子树,右子树也同理。注意需要一个中间变量将左子树先保存一下。看到二叉树第一反应就是递归了,将root的左子树送入。,翻转这棵二叉树,并返回其根节点。给你一棵二叉树的根节点。
2024-02-01 15:59:00 315
原创 leetcode刷题(剑指offer) 572.另一棵树的子树
的基础上,判断一棵树是否为另一颗树的一部分,需要将root和subRoot先放入isSametree中进行比较,然后再将root的左子树和右子树分别递归调用。可以先将题目进行简化,变成如何判断两棵树相等。从根节点开始,如果根节点相等,那就递归的比较左子树和右子树。具有相同结构和节点值的子树。的某个节点和这个节点的所有后代节点。也可以看做它自身的一棵子树。
2024-02-01 15:39:24 352
原创 leetcode刷题(剑指offer) 21.合并两个有序链表
解法类似于归并排序中合并两个数组的部分,由于头节点不确定,因此需要创建一个。指向list2,比较p1和p2的值,较小的先放入到dummy所在链表中。新链表是通过拼接给定的两个链表的所有节点组成的。将两个升序链表合并为一个新的。
2024-02-01 14:35:02 336
原创 leetcode刷题(剑指offer)206.反转链表
*进阶:**链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?,请你反转链表,并返回反转后的链表。分表表示两个节点的前后关系,需要让。的下一个保存起来,方便下次扫描。本题的思路是扫描一遍链表,使用。
2024-02-01 13:49:02 344
原创 leetcode刷题(剑指offer)142.环形链表Ⅱ
本题为判断一个链表中是否存在环,如果不存在就返回null,如果存在就返回入环的第一个节点,解题套路相对固定,类似于。指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。如果链表中有某个节点,可以通过连续跟踪。,返回链表开始入环的第一个节点。来表示链表尾连接到链表中的位置(,仅仅是为了标识链表的实际情况。**进阶:**你是否可以使用。给定一个链表的头节点。如果链表无环,则返回。,则在该链表中没有环。
2024-02-01 11:12:38 335
原创 leetcode刷题(剑指offer) 19.删除链表的倒数第N个节点
但本题存在一个注意点,就是如果只有一个节点,只是删除第一个,那么就需要删除头节点,这就涉及到了头节点的改变,因此还是用到了之前。本题的解题思路是使用两个指针,在此我定义三个指针分别为。**进阶:**你能尝试使用一趟扫描实现吗?举个栗子,链表为[1], n等于1。指针指向的元素就是链表中的倒数第n个,给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。节点用来指向头节点,最后返回。先向前移动n格,然后再让。中提到的技巧,创建一个。遍历到最后一个的时候,
2024-02-01 01:39:36 342
原创 leetcode刷题(剑指offer)905.按奇偶排序数组
left指针遇到奇数,就和right指针位置上的元素交换位置,并且让right向左移动一格(因为不确定和交换之后left位置上是否还是为奇数,因此不能动left,但是right位置上一定是奇数了,所以可以将right想左移动),left遇到偶数,那就left向右移动一格。中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。解法类似于快速排序中,处理数组主元,左右整体有序的过程。定义两个指针,一个从前往后。
2024-02-01 01:07:08 390
原创 leetcode刷题(剑指offer) 10.正则表达式匹配
当p和s都为空的时候一定是可以匹配上的;当p为空,且s不为空的时候,他们一定是无法匹配的;当s为空,且p不为空的时候,只有。正则表达式的引擎则是由有限状态机实现的,由于博主还没搞懂怎么使用。本题是实现一个简易的正则表达式匹配,对于本题而言,有两种方案。遇到了*****: 这也是这题最难的一点*可以匹配任意多个。dp赋值的橙色部分,则按照上述的三种字符串的逻辑来填充。在动态规划中,我们已知的可以使用来求解。黄色和红色部分均为初始化,橙色部分为后续需要填写的。,请你来实现一个支持。的,而不是部分字符串。
2024-01-31 14:59:34 812
原创 leetcode刷题(剑指offer) 82.删除排序链表中的重复元素Ⅱ
首先,我们需要明确三个点,递归函数的作用是什么,递归函数的出口是什么,我们能解决什么小问题,然后将后续的逻辑交给递归函数。写递归逻辑的时候,在函数中调用递归函数本身的时候,将他当成已经实现的函数来使用。迭代法同理,这里需要了解的一个小技巧是,因为在这道题中head是会发生变化的,因此可以创建一个。的下一个即可,这样即使后续的head被删了,我们最后返回的头节点的写法还是不会变化的。链表中,把重复的节点都删除,由于是有序的,因此重复的节点都是。节点,让它的下一个指向head节点,最后返回。
2024-01-30 11:21:44 359 1
原创 leetcode刷题(剑指offer) 237.删除链表中的节点
是当前需要删除的2节点,由于题目中给出提示,每个节点的值都是唯一的,所以可以直接将3节点的值赋值给2,然后再跳过三号节点指向四号节点。这样就实现了逻辑上的删除。本题难点在于,无法走正常的删除节点的流程,因为无法获得上一个节点的信息,只能获取当前节点及其后续的链节点。注意,删除节点并不是指从内存中删除它。,我们想删除它其中的一个节点。照上面的这个例子,题目中给出的。不是链表中的最后一个节点。给你一个需要删除的节点。,并且保证给定的节点。
2024-01-30 00:03:05 381
原创 leetcode刷题(剑指offer) 50.Pow(x, n)
底数为3,指数分别对应二进制每个位的权重,将二进制位为1的数位都相乘。即可得出最后的幂运算结果。这种思想是利用二进制不同位的不同权重的思想来解决的。在计算结果的时候顺带计算出当前位的权重。快速幂运算,会出现的两种情况,求奇次幂,求偶次幂。迭代求解,这里就忽略了,直接进入快速幂运算。计算x的n次幂,主要有以下几种方法。,如果要求x的100次方,可以使用。,按此逻辑一直递归下去即可。
2024-01-29 22:31:44 970
原创 leetcode刷题(剑指offer) 191.位1的个数
可以看出将任意数与1相与,只能得出0和1两个结果,且这个结果是由输入数n的最后一位决定的,根据此结果,可以得到n的最后一位是0还是1。编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为。将输入数n依次向右移动0到32位,与上1,可以求得n各个位上是否为1。在这个逻辑上将n向右移动1位,2位。32位,就可以遍历得到输入数n的1的个数。输入数据长度为32位的。
2024-01-29 20:49:30 315
原创 leetcode刷题(剑指offer) 79.单词搜索
board, 当前匹配的board中字符的横坐标, 当前匹配的board中字符的纵坐标,word, 当前word匹配的字符的wordIndex。本题是经典的深搜+剪枝题,思路:从一个点,往上下左右四个方向进行搜索,如果能走,就递归走下去,当走完整个word的时候,表明数组中存在这个单词。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。:当wordIndex(当前word匹配的字符所对应的索引)等于。的下一个,即可返回匹配失败。
2024-01-29 16:29:55 580
原创 leetcode刷题(剑指offer) 153.寻找旋转排序数组中的最小值
上述的两种情况已经包含了所有可能性,上面的题解是将mid和最右边的值进行比较的,当然也可以和最左边的值进行比较,也可以一半一半的减少搜索范围,且也可以包含所有可能性。定义左边界和右边界,取中间值,如果中间值比右边界更大,那说明,中间值及中间值左边的内容都是被旋转过的,这一半数据可以直接丢弃。如果中间值比有边界更小,那说明,中间值处于没有被旋转的那部分,中间值右边(不包括中间值)的这部分不可能存在最小值,因此可以直接丢弃。,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。次旋转 后,得到输入数组。
2024-01-29 15:16:42 617
原创 leetcode刷题(剑指offer) 509.斐波那契数
这个题是简单的计算斐波那契数列,斐波那契数列就是, 1, 1, 2, 3, 5, 8。本文介绍这题的三种不同时间复杂度的解法,分别是递归实现O(n^2),迭代实现O(n),矩阵乘法实现O(logn)。但是乘法的话存在快速幂运算的计算方法,使用快速幂运算,可以将运算的时间复杂度进一步降低。算法时间复杂度是O(n),和递归实现的区别是,总是记录了前两个值,相当于记忆性递归的效果。只需要记录第n-1项,第n-2项,第n项,就可以使用乘法的方法来计算出第n+1项。计算a的n次方,如果a是偶数,那就直接计算。
2024-01-29 00:37:14 1005
原创 leetcode刷题(剑指offer) 232.用栈实现队列
使用栈来实现队列操作,只需要模拟出队列先进先出的特性就行了,众所周知,栈是先进后出的,因此这题可以使用两个栈来实现,先进后出 + 先进后出 = 先进先出,如下图所示。此图为栈的逻辑,8是最后一个进入的,第一个出来,将两个栈连起来之后是这样子的。实现了1先进入,1最先出去的逻辑。我们这边假设上面的栈叫A,下面的栈叫B。请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(此图为队列的逻辑,1从左第一个进入,从右第一个出来。
2024-01-27 00:49:03 366
原创 leetcode刷题(剑指offer) 105.从前序与中序遍历序列构造二叉树
的工具类(用于层级打印Tree),由于树类型的题,这两个类出现较为频繁,因此,我单独抽出到公共模块中。看到这道题的时候,脑海中第一反应就是递归,递归逻辑即为拿整个先序遍历数组和整个中序遍历数组生成。,请构造二叉树并返回其根节点。解题之前先准备好需要的类。
2024-01-25 00:15:47 371
原创 leetcode刷题(剑指offer) 240.搜索二维矩阵Ⅱ
仔细观察上图可以发现,从右上角出发,每次往左一格都是更小的数值,每次往下一格都是更大的数值,且从右上角的位置,以往左和往下这两个方向可以抵达二维数组的任何一格。从15这个位置开始,如果目标数比15更大就向右,比15更小就向左,以此迭代,最后可以找到目标数,如果遍历到不能再向下遍历了,那就是矩阵中不存在目标数。15就是根节点,搜索的次数最多就为这颗树的深度。可能直接从上图的矩阵上来看不容易理解,那么把这个图翻转45°变成下图所示呢。方法的时间复杂度为O(N), 空间复杂度为O(1)。
2024-01-24 22:15:45 534
原创 dolphinscheduler节点二次开发需要改动的部分
修改文件给TASK_TYPES_MAP增加新节点的映射信息,如下修改完成之后,新节点的名字就会在dolphin组件的侧边栏显示出来啦。修改文件.draggable.icon-修改完成之后,新节点的logo就会在dolphin组件的侧边栏显示出来啦。在目录下新增节点字段的ts文件如下所示:期间需要新增国际化文件中的字段信息。在目录下新增节点字段的ts文件ps: 这里存在不容易察觉到的细节,尤其注意。这个地方一定要跟着改,不然页面上显示的字段,还是之前复制的那个节点的字段。修改文件。
2024-01-24 17:24:22 1034 1
原创 leetcode刷题(剑指offer) 287.寻找重复数
但是后来画图出来,再仔细屡屡还是可以发现,我们搜环是从下标0开始的,因为题目已经明确了取值是在[1, n]范围内的,因此,当我们从0开始出发的时候,并不会遇上自成环的情况,也不会遇上首位相连的情况,因为没有任何一个元素会等于0,因此也不会形成0的首位相连环,因此还是这个思路,找到入环的第一个节点,就是重复的数,像上述的情况,1-3, 4-4的环,我们可以直接忽略他们。可以看出,让出现具有重复的数值的时候,使用n, num[n]的映射关系,构建出来的链表会出现环,而环的入口即是重复的数字。
2024-01-23 00:09:20 884
原创 dolphinscheduler部署排错记录
问题出现场景: 在部署完ui, worker, master, api四个模块之后,随手建了一个工作流,点击运行的时候,在master节点上出现这个报错。
2024-01-16 18:12:53 534
原创 dolphinscheduler的worker和master模块打包镜像时遇到的坑
在执行过程中可能会出现 “ERROR: unsatisfiable constraints” 错误,这意味着。)来安装缺失的库文件。例如,在 Alpine Linux 上,你可以运行以下命令安装。是 Linux 系统中的一个库文件,用于与设备和 udev 服务进行交互。因此,可以尝试安装这些软件包之一来满足。在系统中存在:检查系统中是否安装了。的库,但是该库在资源路径中找不到。软件包通常不是直接提供的,而是由。在 Alpine Linux 中,软件包无法满足系统的依赖条件。使用eudev软件包。
2024-01-05 11:48:18 382
原创 MIT 6.824 分布式系统 lab1 MapReduce 遇到死锁问题
代码逻辑借鉴:https://blog.csdn.net/weixin_45938441/article/details/124018485。
2023-12-30 10:29:22 343 2
原创 记录JVM的学习
什么时候出现OOM了,JVM就什么时候自动转出堆信息文件jmap生成的那个。top -Hp [进程号] 查看某个进程中的线程所占用的cpu资源。jstack [进程号] 将java程序的线程详细信息打印出来。jinfo [进程号] 显示出java进程的详细信息。jstat -gc [进程号] java程序的统计信息。记录回收了多少种不同引用类型的引用。记录回收了多少种不同引用类型的引用。特别常用的参数(必须会用)特别常用的参数(必须会用)使用TLAB, 默认打开。打印TLAB的使用情况。
2023-12-18 23:46:53 840
原创 tcpdump的入门
在Linux平台将网络中传输的数据包全部捕获过来进行分析支持网络层,传输层协议等协议捕获过滤数据发送和接收的主机,网卡和端口等各种过滤捕获数据规则提供and, or, not等语句进行逻辑组合捕获数据包或去掉不用的信息结合wireshark工具分析捕获的报文。
2023-12-17 15:34:09 813
原创 记录自己的一次除零异常java.lang.ArithmeticException:/ by zero(上篇)
今天在公司开发,突然遇到了一个java.lang.ArithmeticException:/ by zero异常,业务逻辑如下:这是一个可以动态拼接prompt(用于动态替换prompt中占位符的内容是从数据库中查询出来的),把prompt批量输入到大语言模型中进行回答的逻辑。整体出现。
2023-11-23 21:42:26 405 2
原创 记录自己遇见的一次ClassNotFoundException
记录今天遇到的一个事情是酱紫的~今天在公司写了一个公共模块Common-A,然后需要把这个Common模块用于其他的业务项目中,A模块中需要使用反射工具类来进行对象字段直接的get,set赋值(没有引入spring,只是使用java本身自带的反射类)。但是A模块为业务模块,像反射这种和业务无关的功能应该写在与业务无关的Common的moudle下,因此我在Common-core模块下,引入了反射包orika-core。maven依赖如下。</</</</
2023-11-10 12:02:18 104 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人