自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2026年--Lc342-841. 钥匙和房间(图 - 广度优先搜索)--java版

当 x 号房间中有 y 号房间的钥匙时,我们就可以从 x 号房间去往 y 号房间。如果我们将这 n 个房间看成有向图中的 n 个节点,那么上述关系就可以看作是图中的 x 号点到 y 号点的一条有向边。这样一来,问题就变成了给定一张有向图,询问从 0 号节点出发是否能够到达所有的节点。最初,除 0 号房间外的其余所有房间都被锁住。你的目标是进入所有的房间。然而,你不能在没有获得钥匙的时候进入锁住的房间。时间复杂度:O(N + K),N:房间数,K:钥匙总数。空间复杂度:O(N),vis 数组 + 队列。

2026-01-16 21:17:49 53

原创 2026年--Lc341-450. 删除二叉搜索树中的节点(二叉搜索树 ,递归)--java版

1)当要删除的节点有两个孩子时,不能直接删,而是要用一个“合法的替代节点”来顶替它,这个节点叫做右子树中最小的节点(也叫 中序后继,successor)。这个代表得到要删除节点的值。这个代表得到要删除节点的值。左子树的所有节点(如果有)的值均小于当前节点的值;右子树的所有节点(如果有)的值均大于当前节点的值;return root:返回要删的节点值的上一层。return root:返回要删的节点值的上一层。对删除节点值的情况,分成3种。(3)要删除的值在右子树中。(1)要删除的值在根节点。

2026-01-16 00:15:53 36

原创 2026年--Lc340-1161. 最大层内元素和(二叉树 , 广度优先搜索bfs)--java版

按层遍历的逻辑是:只要当前层还有节点,就继续循环;当 q 为空,说明没有下一层了,遍历结束。遍历当前层的节点有左孩子,左孩子入队;遍历当前层的节点有右孩子,右孩子入队。只是让 tmp 引用当前的 q(当前层)。随后把 q 换成新的空列表,用来装下一层节点。q.isEmpty() 表示:q 这个列表为空(没有节点了)。q.isEmpty() 表示:q 不为空,还有节点要处理。遍历结束后,用 maxSum 更新最大层和,并进入下一层。用bfs来遍历每一层的节点,然后对每一层的节点求和。遍历 tmp(当前层)

2026-01-13 14:55:39 163

原创 2026年--Lc339-二叉树的最近公共祖先(树,递归)--java版

如果当前节点是 null 或者是目标节点之一(p 或 q),直接返回当前节点。如果左子树返回 null,说明 p 和 q 都在右子树中,返回右子树的结果。如果右子树返回 null,说明 p 和 q 都在左子树中,返回左子树的结果。如果左右子树都不为 null,说明当前节点就是最近公共祖先,返回当前节点。左子树返回值为 l,右子树返回值为 r。

2026-01-13 14:24:30 19

原创 2026年--Lc338-1372. 二叉树中的最长交错路径(树)--java版

dir=0 表示“上一步走的是左边”(所以下一步要走右才算继续)dir=1 表示“上一步走的是右边”(所以下一步要走左才算继续)len 表示当前 ZigZag 的边数长度。

2026-01-12 15:06:33 486

原创 2026年--Lc337-547. 省份数量(图)--java版

在DFS方法要传入未被访问的节点i,然后再去遍历j,即去遍历列数。要求isConnentd[i][j]==1是相连接的,并且isVisited[j]是未被访问的。用 visited[] 标记城市是否访问过。每遇到一个没访问过的城市,就从它开始 DFS,把它所在连通块全部标记,然后 cnt++。

2026-01-12 14:16:28 364

原创 2026年--Lc336-1448. 统计二叉树中好节点的数目(树)--java版

在题目的定义中,从根到好节点所经过的节点中,没有任何节点的值大于好节点的值,等同于根节点到好节点的路径上所有节点(不包括好节点本身)的最大值小于等于好节点的值。空间复杂度:O(n)。由于我们使用递归来实现深度优先遍历,因此空间复杂度的消耗主要在栈空间,取决于二叉树的高度,最坏情况下二叉树的高度为 O(n)。可以在深度优先遍历的过程中,记录从根节点到当前节点的路径上所有节点的最大值,若当前节点的值大于等于该最大值,则认为当前节点是好节点。时间复杂度:O(n),其中 n 为二叉树中的节点个数。

2026-01-10 15:41:56 254

原创 2026年--Lc334-2130. 链表最大孪生和(链表转数组)--java版

Java 里 ArrayList 不能用 list[i] 这种数组下标访问,要用list.get(i)去取元素。(3)计算每对 arr[i] + arr[n-1-i],维护最大值。(2)n = size,只遍历前半段 i = 0 …(1)遍历链表,把所有节点值放进 ArrayList。

2026-01-09 16:42:57 298

原创 2026年--Lc333-328. 奇偶链表(链表)--java版

odd.next=even.next:跳过偶数,把下一个奇数连起来。even.next=odd.next:跳过奇数,把下一个偶数连起来。最后把奇数链尾接回 evenHead。

2026-01-08 13:27:16 311

原创 2026年--Lc332-649. Dota2 参议院(队列)--java版

某人第一次在 i 时刻行动,下一次自然在 i+n,再下一次 i+2n……+n:表示“他的下一次出场发生在下一轮(排到本轮所有人后面)”放队尾:表示“他还活着,下一轮还会回来投票”…第二轮时间:n,n+1,队列就是在维护“谁下一次最早行动”第一轮时间:0,1,2,把所有下标看成时间线:…

2026-01-07 19:41:21 397

原创 2026年--Lc331-933. 最近的请求次数(队列)--java版

每次来了一个时间点 t(毫秒),返回最近 3000 毫秒内(包含端点)一共有多少次请求。严格定义是:返回所有满足t−3000≤x≤t的请求时间 x 的数量。首先这道题,需要判断当前t时间点上request请求数是不是在区间[t-300,t]中,并统计该区间有多少个请求。

2026-01-07 18:47:06 105

原创 2026年--Lc330-394. 字符串解码(栈)--java版

遍历传入的参数,如果遇到的字符是数字,且数字是多位用num乘法10+尾数-‘0’;如果是左括号,把之前遇到的数字加入到数字栈,字符加入到字符栈,同时充值数字临时变量和字符临时变量,重新寻找。如果遇到的是普通字符,用字符临时变量和当前字符进行拼接。遇到 ]:说明括号内部拼完了,此时 curStr 就是 这一层括号内的结果,要拿它去重复 times 次,并接回上一层前缀。进入一层 [ 后:我们把外层的 curStr 入栈保存,然后把 curStr=“”,开始在新层里拼括号内部的内容。用来分别存储数字和符号。

2026-01-06 21:47:22 307

原创 2026年--Lc329-735. 小行星碰撞(栈)--java版

当前 a < 0:你也向左,同方向永远不会相撞(它们只会一起往左跑,距离不会变小到相撞)。在处理 a < 0(向左)的小行星时,我们会用 while 循环让它和栈顶那些 >0(向右)的小行星连续碰撞。如果遇到 栈顶 > 0 且 栈顶的大小 == |a|:两者都爆炸(pop),当前 a 也没了,结束。当 栈顶 > 0 且 栈顶的大小 < |a|:栈顶爆炸(pop),继续看下一个栈顶。如果遇到 栈顶 > 0 且 栈顶的大小 > |a|:当前 a 爆炸,不入栈。栈顶是负数,表示左边最近的那颗小行星也在向左走。

2026-01-06 20:42:53 310

原创 JAVA并发

一个 Java 程序的运行是 main 线程和多个其他线程同时运行。

2025-12-17 23:52:41 234

原创 2025年--Lc313-662. 二叉树最大宽度--java版

下一层宽度 = list.getLast() - list.getFirst() + 1。list:存与 q 中节点一一对应的“位置编号 index”list 存这些节点在完全二叉树中的位置编号 index。(1)用 BFS 按层遍历二叉树。q 和 list 中剩下的就是下一层的节点及其编号。list 这个链表的头部取出并删除第一个元素。右孩子 = 2 * index + 1。(4)res 记录所有层中最大的宽度。左孩子 = 2 * index。根节点 index = 1。q 存当前层的真实节点;

2025-12-07 23:17:03 183

原创 2025年--Lc302-415. 字符串相加--java版

我们定义两个指针 i 和 j 分别指向 num 1 和 num 2 的末尾,即最低位,同时定义一个变量 add 维护当前是否有进位,然后从末尾到开头逐位相加即可。你可能会想两个数字位数不同怎么处理,这里我们统一在指针当前下标处于负数的时候返回 0,等价于对位数较短的数字进行了补零操作,这样就可以除去两个数字位数不同情况的处理,

2025-12-04 21:24:04 230

原创 2025年--Lc302-2942. 查找包含给定字符的单词--java版

(2)每一个字符串中,在进行二次遍历,把每一个字符串变成字符数组,去遍历每个字符串的字符,如果正好等于x,记录到结果列表中(标记是在哪个字符串中,只需记录1次,所以要用到break)(1)字符串数组中,取出每一个的字符串。

2025-12-01 23:05:01 187

原创 2025年--Lc298-1019. 链表中的下一个更大节点(栈)--java版

遍历到一个新节点 cur 时,如果 cur.val 比栈顶的小或相等,那它也“没有更大值”,先压栈。对栈顶那个节点来说,当前的 cur.val 就是它“后面第一个更大的值”,res 是“答案列表”,按链表顺序存每个节点的【下一个更大节点的值】。那就把栈顶弹出,同时在结果数组对应位置写上 cur.val。你之前已经 res.add(0) 预填了 0,直接保留就行。(2)从栈底到栈顶,节点值是单调递减的。栈里剩下的节点就说明后面再也没更大的了,它在结果数组中的位置 = 0。这个节点的值 = 2。

2025-11-30 21:51:18 251

原创 2025年--Lc297-3427. 变长子数组求和--java版

因为是子数组,使用确定完左边界的值,要挨个加元素到右边界num[i]左区间a的话等于取max(0,i-nusm[i])首先子数组的取值范围是[a,b]右区间b的话等于当前的索引i,

2025-11-30 20:49:04 189

原创 2025年--Lc293-784. 字母大小写全排列(回溯)--java版

大写字符与其对应的小写字符的 ASCII 的差为 32,32 这个值如果敏感的话,它是 2。char[] ch:当前正在操作的状态/路径载体(我们在 ch 上改大小写)而这两者合并起来,就是给这个字符做一次不进位的加法,即异或上 1 << 5。int index:当前决策到第几个字符(也就是“递归到了第几层”)如果字符是小写字符,减去 32 得到大写字符;如果字符是大写字符,加上 32 得到小写字符。,在编程语言中,可以表示为 1 << 5。index 就是“当前处理到哪一位了”,深度优先遍历(回溯)

2025-11-27 21:46:22 326

原创 2025年--Lc289-71. 简化路径--java版

对于「两个点」或者「目录名」,我们则可以用一个栈来维护路径中的每一个目录名。当我们遇到「两个点」时,需要将目录切换到上一级,因此只要栈不为空,我们就弹出栈顶的目录。这样一来,我们只需要遍历 names 中的每个字符串并进行上述操作即可。在所有的操作完成后,我们将从栈底到栈顶的字符串用 / 进行连接,再在最前面加上 / 表示根目录,就可以得到简化后的规范路径。对于「空字符串」以及「一个点」,我们实际上无需对它们进行处理,因为「空字符串」没有任何含义,而「一个点」表示当前目录本身,我们无需切换目录。

2025-11-26 23:54:34 422

原创 2025年--Lc283-1527. 患某种疾病的患者-sql版

% DIAB1%’ 类似 A DIAB1…的形式 前后是其他字符串。‘DIAB1%’ 把DIAB1后面的字符串用%替代。模糊匹配,看你要模糊匹配的字符串的位置。

2025-11-25 22:42:42 149

原创 2025年--Lc282-1327. 列出指定时间段内所有的下单产品-sql版

2020 年 2 月份下单 product_id = 1 的产品的数目总和为 (60 + 70) = 130。2020 年 2 月份下单 product_id = 5 的产品的数目总和为 (50 + 50) = 100。2020 年 2 月份下单 product_id = 3 的产品的数目总和为 (2 + 3) = 5。写一个解决方案,要求获取在 2020 年 2 月份下单的数量不少于 100 的产品的名字和数目。2020 年 2 月份下单 product_id = 2 的产品的数目总和为 80。

2025-11-25 22:34:40 737

原创 2025年--Lc281-162. 寻找峰值-Java版

所以直接i=1,用nums[i]和nums[i-1]进行比较,然后设置一个变量保存当前索引,并返回。前后元素是不同的,我们返回峰值的索引是任意的,选择任意一个峰值返回。(1)传统思路,因为nums[i]!=nums[i+1](2)时间复杂度O(logN)二分查找。

2025-11-25 20:59:51 347

原创 23种设计模式总结

spring框架底层就有用到工厂模式,主要是用来进行对象之间的解耦。(1)简单工厂所有产品都共有一个工厂,如果新增产品,则需要修改代码,违反开闭原则。是一种编程习惯(2)工厂方法模式给每个产品都提供了一个工厂,让工厂专门负责对应产品的生产,遵循开闭原则。项目中用的多。(3)抽象工厂模式如果有多个维度的产品需要配合生产时,建议采用抽象工厂(工厂的工厂)一般企业开发中用的少。

2025-11-23 19:54:58 266

原创 2025年--Lc269-LCR 004. 只出现一次的数字 II-Java版

用hashmap记录元素和元素出现的频率,然后通过ma.get()方法,获取频率等于1的元素然后返回。

2025-11-17 11:08:50 442

原创 2025年--Lc267-7. 整数反转-Java版

判断反转后的数字res*10+tep是否在该区间里面。

2025-11-15 22:19:31 464

原创 2025年--Lc232-LCR 019. 验证回文串 II-Java版

如果删除 s[right],则剩余字符的下标范围是 [left,right−1]。分别检查这两个下标范围中的子串是不是回文串,如果其中至少有一个子串是回文串,则可以通过删除一个字符将 s 变成回文串,否则不可以通过删除一个字符将 s 变成回文串。如果移动过程中,两个指针指向的字符总是相同,则字符串是回文串。特别地,如果移动过程中 s[left]=s[right] 总是成立,则 s 是回文串,不需要删除任何字符。=s[right],则需要删除 s[left] 或 s[right],才可能将 s 变成回文串。

2025-11-11 00:01:08 216

原创 2025年--Lc231-350. 两个数组的交集 II-Java版

【代码】2025年--Lc231-350. 两个数组的交集 II-Java版。

2025-11-10 22:57:49 172

原创 2025年--Lc230-119. 杨辉三角 II-Java版

【代码】2025年--Lc230-119. 杨辉三角 II-Java版。

2025-11-10 21:35:15 194

原创 2025年--Lc229-32. 最长有效括号(栈)-Java版

1 表示“最左侧边界的前一位”。当一开始就出现一段合法串(比如 “()” 从下标 0 开始),长度就能算成 i - (-1)。用栈存“尚未匹配的左括号索引”;额外压入一个哨兵 -1 当“基准起点”。遇到右括号)时先弹出一个左括号(;若左括号栈空了,说明这个)无法匹配,就把它的索引当成新的基准压栈;若栈没空,当前有效长度 = 当前索引 i − 栈顶索引,更新答案。如果某个)不匹配,我们把它的下标压栈,充当“新的左边界前一位”。leetcode模式。

2025-11-01 22:29:11 299

原创 2025年--Lc228-523. 连续的子数组和(带测试用例)-Java版

【代码】2025年--Lc228-523. 连续的子数组和(带测试用例)-Java版。

2025-11-01 20:40:21 259

原创 2025年--Lc227--200. 岛屿数量(递归,带测试用例)-Java版

岛屿是1,每座岛屿只能由水平方向和竖直方向上相邻(该元素的上下左右的方向)的陆地陆续连接形成。

2025-10-31 20:52:12 196

原创 2025年--Lc226--110. 平衡二叉树(递归,带测试用例)-Java版

二叉树的每个节点的左右子树的高度差的绝对值不超过 1,则二叉树是平衡二叉树。根据定义,一棵二叉树是平衡二叉树,当且仅当其所有子树也都是平衡二叉树,因此可以使用递归的方式判断二叉树是不是平衡二叉树,递归的顺序可以是自顶向下(也可自底向下)。平衡二叉树的要求是:对于树上任意一个节点,它的左子树高度和右子树高度的差值不超过 1。并且左右子树本身也都是平衡的。这个题不是在判断是不是二叉搜索树(BST),而是在判断“这棵树是不是平衡二叉树(AVL风格)”。(1)判断左右子树的高度差是不是小于1。

2025-10-29 14:35:31 599

原创 2025年--Lc224--100. 相同的树(递归,dfs,带测试用例)-Java版

(4)调用方法递归遍历(p树的左孩子节点,q树的左孩子节点)&&(p树的右孩子节点,q树的右孩子节点。(3)考虑两棵树一棵是null,一棵树非null的情况。(2)考虑两棵树其中1棵树是null的情况。(1)考虑两棵树都是null的情况。(5)其他情况直接返回false;方法2:不带测试用例。

2025-10-29 13:57:09 315

原创 2025年--Lc223--104. 二叉树的最大深度(递归,带测试用例)-Java版

如果根节点不空,递归遍历左子树和右子树,用Math.max(左子树的深度、右子树的深度)+1计算整个树的最大深度。

2025-10-29 13:17:03 236

原创 2025年--Lc222--107. 二叉树的层序遍历 II(队列,collections.reverse())-Java版

Java 里应该用 Collections.reverse(res);这个工具方法原地反转整个 List<List>(2)定义一个大列表,也就是列表的列表,存储所有层的结果。如果队首元素左右孩子,分别把左右孩子加入到队列中。(5)最后把当前层的列表添加到大列表中。先取出队首元素并删除poll()2)定义1个小列表存储每层的值。1)计算此时队列中元素的个数。队首元素的值加入小列表中。(4)如果队列不为空。3)遍历当前层的元素。

2025-10-28 23:44:53 585

原创 2025年--Lc221--144. 二叉树的前序遍历(递归版)-Java版

根左右,如果根节点的左节点不为空,递归遍历当前res的左节点。如果根节点的右节点不为空,递归遍历当前res的右节点。

2025-10-28 23:17:19 381

原创 2025年--Lc220--589. N 叉树的前序遍历(递归版)-Java版

根节点入队,再去遍历根节点的孩子节点(左右)

2025-10-28 23:09:52 211

原创 2025年--Lc219-590. N 叉树的后序遍历(递归版,带测试用例)-Java版

输入是按层序遍历进行序列化表示,每组子节点由null隔开。都是先把自己的子节点遍历完,再去遍历根节点。

2025-10-28 23:03:18 292

空空如也

空空如也

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

TA关注的人

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