自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HttpServletResponse下载文件

明确文件名称:可以截取 文件路径字符串,最后一个\之后的字符,即文件名,\需要转义,写为\\。设置可以下载文件的请求头:设置头字段,将内容作为附件处理。明确待下载文件路径:可以写绝对路径,因为默认的相对路径可能与实际存储路径不符。完成后,在项目的WEBINF-web.xml文件下注册servlet。将待下载文件放入项目下,此处将图片放在了resources目录下。将文件流写入缓冲区,输出流输出,直到文件字节全部读入,输出完成。写缓冲区:建立一个byte单位的缓冲区。将文件转化为流:文件转为输入流的形式。

2025-10-27 22:19:33 180

原创 idea建有servlet类的web项目

7.在servlet类下写好方法后,需要到该子项目-webapp -WEB-INF -web.xml中配置servlet映射,完成注册,需要。6.新建的servlet类需要继承HttpServlet,通过重写这个接口里的方法实现功能。3.创建一个子项目,在建的maven空项目下建立一个带webapp模板的maven项目。url-parttern是在web中访问该页面时额外需要输入的路径,也可任意取。2.在pom.xml中配置servlet依赖,更多的依赖可以到官网搜索。class是刚刚写好的类的路径。

2025-10-23 23:02:42 563

原创 Servlet Context

使用时,可以创建一个Servlet类写入数据,再用另一个Servlet类读取数据。但要先运行写入类,然后才能读取。否则,数据未写入,会读取失败。Servlet Context相当于处于所有Servlet类之上,它其中存储的数据可以被所有的ervlet共享,均可读写。在一个项目下可以有多个servlet类,他们之间的数据交流比较困难。可以通过Servlet Context实现数据共享。

2025-10-23 22:40:20 129

原创 130. 被围绕的区域

在上图中,底部的区域没有被捕获,因为它在 board 的边缘并且不能被围绕。第一遍检查是否环绕,同时把访问的O暂时标记为#进行dfs,dfs遍历方法同上一题岛屿数量。如果是环绕,进行第二次dfs,把#改为X。如果不环绕,第二次dfs把#改回O。你不需要返回任何值。

2025-10-11 21:42:43 406

原创 200. 岛屿数量

遍历整个网格,遇到为1的节点,岛屿数加一,以其为起点进行四个方向的深度优先搜索,将与其相连的陆地(1)全部设为水域(0),防止对同一个岛屿进行重复访问。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。深度优先遍历的停止条件是该方向遇到水域(0),或者到达边界。(水)组成的的二维网格,请你计算网格中岛屿的数量。此外,你可以假设该网格的四条边均被水包围。

2025-10-11 20:59:32 236

原创 230. 二叉搜索树中第 K 小的元素

请你设计一个算法查找其中第。层级遍历得到所有元素,放入列表中。对列表排序,返回下表为k-1的值。小的元素(从 1 开始计数)。给定一个二叉搜索树的根节点。

2025-10-02 20:56:55 154

原创 530. 二叉搜索树的最小绝对差

对每个将要加入的元素,与之前的元素做减法,判断其绝对值是否小于之前的min,小于则更新,层级遍历,用一个队列判断层,另一个列表存储所有元素。差值是一个正数,其数值等于两值之差的绝对值。给你一个二叉搜索树的根节点。

2025-10-02 20:47:52 337

原创 637. 二叉树的层平均值

注意sum每层遍历完成后更新,部分节点值超出int范围,sum需设为long型,res需设为Double型。第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11。同上一题,层级遍历,用sum累计这一层节点值,除以这层节点数,得到平均值加入res。, 以数组的形式返回每一层节点的平均值。因此返回 [3, 14.5, 11]。给定一个非空二叉树的根节点。以内的答案可以被接受。

2025-09-28 21:35:29 135

原创 199. 二叉树的右视图

计算该层结点数,用队列首元素做当下判断元素,判断左右节点是否为空,不为空分别加入。,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。用一个队列进行层级遍历,先加入根节点作为初始化,如果该元素是这一层最后一个元素,则加入结果队列。对树进行层级遍历,取每层中最后一个元素。直到队列为空,全部遍历完成。

2025-09-28 21:25:58 307

原创 112. 路径总和

如果遍历到底不符合,进行回溯,将HashMap中该点移除,撤销访问标记,从当前访问路径中撤销该点,将sum值恢复原值,返回false,表示这一次深度遍历,该叶子节点不符合。如果两个遍历完都不符合,进行该结点的回溯,操作同上。用queue存储现在的访问路径,sum存储当前和。的路径,这条路径上所有节点值相加等于目标和。如果已经找到,标记,不再进行之后的深度遍历。如果符合,返回true,表明已经找到。和一个表示目标和的整数。用HashMap做访问标记。是指没有子节点的节点。

2025-09-26 22:41:19 448

原创 114. 二叉树展开为链表

对树进行先序遍历,存入队列,通过队列的数据重新构建树。

2025-09-25 22:37:09 188

原创 leetcode(填充每个节点的下一个右侧节点指针 II)

如果为null表明此元素是这一层的首个元素,不需要指向。判断完成后,将他的左右子结点(非空)加入队列。填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为。for循环重复直到这一层元素均被遍历,使下一层它们的左右子结点均被加入。采用层级遍历,也可以称广度优先遍历(BFS),建立一个队列存储,按每一层搜索查看。计算此节点算在的这一层元素个数(队列长度),对每一层,设一个pre节点初始化为null。首先建立数组,将根节点放入,开始操作。

2025-09-23 22:37:22 287

原创 leetcode41(对称二叉树)

对每一个根节点,取它的左右子树,判断左右子树的根节点值,同时递归的查找它的子树。可以先将左或右子树反转,然后对两者判断是否相同,检查是否对称。给你一个二叉树的根节点。, 检查它是否轴对称。

2025-09-15 10:53:36 279

原创 leetcode40(翻转二叉树)

思路:对于树,依然采用递归操作,先对最小树进行翻转,然后层层向上。,翻转这棵二叉树,并返回其根节点。给你一棵二叉树的根节点。

2025-09-15 10:05:31 406

原创 leetcode39(相同的树)

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。与上一题类似,将其拆分为两个子树,递归判断。,编写一个函数来检验这两棵树是否相同。给你两棵二叉树的根节点。

2025-09-14 18:18:03 237

原创 leetcode38(二叉树的最大深度)

递归,将树以根节点为界,分为左右子树,对两颗子树求最大深度,取较大的值,然后+1(根节点)是指从根节点到最远叶子节点的最长路径上的节点数。重复拆分过程,一层层向上,获取最大值。

2025-09-14 17:39:46 250

原创 leetcode37(随机链表的复制)

指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。再次遍历原链表,random指向某位置,则新链表random指向hashmap对应值。我们存储原链表Node的位置与新建链表对应Node的位置为Hashmap。节点组成,其中每个新节点的值都设为其对应的原节点的值。个节点组成的链表来表示输入/输出中的链表。的链表,每个节点包含一个额外增加的随机指针。,该指针可以指向链表中的任何节点或空节点。那么在复制链表中对应的两个节点。例如,如果原链表中有。返回复制链表的头节点。

2025-09-14 12:48:28 472

原创 leetcode36(合并两个有序链表)

对符合条件的元素a,用其直接初始化当前结点的下一个节点,防止其为null无法赋值或者提前初始化导致链表尾有冗余。新链表是通过拼接给定的两个链表的所有节点组成的。思路:依然是构建一个新的链表储存最终结果,对于存储结果的过程。然后设一个链表节点参数prev,使其等于链表表头。然后prev继续向下移动,直到结束。返回head.next开头的链表。将两个升序链表合并为一个新的。首先初始化一个链表head。

2025-09-14 12:16:40 232

原创 leetcode35(两数相加)

链表相加,需要新建一个链表,注意新建链表next赋值之前要先初始化,同时要处理进位问题,尤其是最后一位进位。获得该位置sum,做除法获得进位,做取余 获得该处相加后的数值。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。的链表,表示两个非负的整数。请你将两个数相加,并以相同形式返回一个表示和的链表。采用的的是,每一位初始值sum设为进位值0/1。l1元素不为空,则sum加l1值。此时以sum为初始值初始化新数组的next。的方式存储的,并且每个节点只能存储。重复该过程直到全部加完。

2025-09-13 19:58:54 163

原创 leetcode34(环形链表)

1.按顺序访问链表,对每一个访问的元素,加入hashset,由于hashset不允许添加重复元素,沿环回到已经访问过的位置时,再次添加haset的add方法会返回false,证明存在环,返回true,否则返回false。2.用快慢指针,两个指针速度不同,慢指针依次向后遍历,快指针两个为一单位遍历,如果存在环,快慢指针在相差一个环的距离后会重合。指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。来表示链表尾连接到链表中的位置(索引从 0 开始)。,判断链表中是否有环。

2025-09-13 19:01:14 151

原创 leetcode33(最小栈)

所以,在该类开始时就建立两个栈,一个用来存放数据,一个存放每个数据存入时更新的最小值。正常在getMin新建辅助栈,获取最小值时时间会超限。对两个栈同时做push和pop操作,确保两者对应正确。操作,并能在常数时间内检索到最小元素的栈。

2025-09-13 18:42:23 200

原创 leetcode32(简化路径)

以/为界分开,用栈存储,遇到..做记录,直到遇到非..的进行处理。如果遇到非..字符串时有待处理的..记录,则舍弃,即返回上层。,表示指向某一文件或目录的 Unix 风格。如果没有,则存入待输出的栈,额外加/开头),请你将其转化为。如果待输出栈为空,单独处理。

2025-09-13 12:02:50 407

原创 leetcode31(插入区间)

升序排列,且区间之间不重叠(如果有必要的话,可以合并区间)。思路:把新加入的元素插入,重新重复上一题的合并区间步骤。你可以创建一个新数组然后返回它。按照区间起始端点排序的区间列表。表示另一个区间的开始和结束。个区间的开始和结束,并且。

2025-09-13 10:55:46 126

原创 leetcode30(合并区间)

接下来遍历到【2,5】,数据不改变,继续向下查看下一个数组,持续更新,直到不再连续,将数据写入队列,start和end取到有效的新值,直到结束。比如遍历到【1,4】,后续为【2,5】,此时2<4,有重合区间,合并,更新右侧数据end 4->5。合并区间依据是两者是否有重合的区间,那么可以根据左侧大小排序后确定合并,可以减少讨论情况。一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。如果可以合并,合并后右侧数据更新,取合并后更大的值,如果没有可以合并的,将原来的数组直接存入队列。

2025-09-12 23:06:45 331

原创 leetcode29( 有效的括号)

思路:将待匹配的左侧符号入栈,遇到右侧符号时弹出匹配,如果匹配失败立刻返回false。如果遍历结束,依然有左侧符号未被弹出,返回false。,判断字符串是否有效。长为0和1的单独处理。

2025-09-12 22:25:55 225

原创 leetcode28( 汇总区间)

的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个区间但不属于。检查连续,单独一个数字单独处理,注意边界。对长度为0和1的数组单独处理,(包含)的所有整数的集合。列表中的每个区间范围。

2025-09-11 21:09:04 204

原创 leetcode27(两数之和)

因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。整数,并返回它们的数组下标。你可以按任意顺序返回答案。,请你在该数组中找出。

2025-09-11 18:34:22 177

原创 leetcode26(字母异位词分组)

注意,不直接用char数组做关键字是因为char数组为引用型,检查是否包含时以地址是否包含为准而不是具体数值或元素,所以无法用来检查重复出现的字符串。hashmap以排好序的字符串为关键字,value为String队列,用来存储这段排好序的字符串对应的所有原始字符串。遍历String数组,对每个字符串,先拆为char字符数组,进行排序后,重新转化为String字符串。给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。最后返回所有value的列表。思路:依然用hashmap。

2025-09-11 18:29:35 142

原创 leetcode25(有效的字母异位词)

对下一个字母遍历,每次-1,如果存在最终不为0的value值,则false,符合则true。将字符串转化为字符数组,对其排序,看两者是否相同。同时,长度不等,直接返回false。键值对保存出现的字母及次数。,编写一个函数来判断。

2025-09-11 17:47:58 156

原创 leetcode24(单词规律)

中的每个非空单词之间存在着双向连接的对应规律。)完全一样,只需要设置String数组替换c2。思路与上一题(leetcode23。里的每个字母和字符串。是否遵循相同的规律。

2025-09-11 17:40:04 224

原创 leetcode23(同构字符串)

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。中的字符可以按某种映射关系替换得到。,那么这两个字符串是同构的。用hashmap建立映射关系。,判断它们是否是同构的。

2025-09-11 15:38:05 110

原创 leetcode22(赎金信)

ransomNote,每个字符到Hashmap查找,找不到或数量不够返回false。用Hashmap统计。

2025-09-11 14:49:28 197

原创 leetcode21(旋转图像)

旋转图像,这意味着你需要直接修改输入的二维矩阵。请你将图像顺时针旋转 90 度。使用另一个矩阵来旋转图像。思路:用的螺旋矩阵思想、

2025-09-11 14:33:45 336

原创 leetcode20(螺旋矩阵)

模拟该过程,分别对四个方向进行讨论,每个方向的起止位置,两次同方向间参数的变化(边界+或-)以及终止模拟的条件。起始位置由左->右,两次不同参数为第二次的右边界向左移动,右边界right-1,终止条件为左边界>右边界或者上边界>下边界。,返回矩阵中的所有元素。

2025-09-11 13:30:14 179

原创 leetcode19(有效的数独)

验证已经填入的数字是否有效即可。

2025-09-10 21:22:05 322

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

如果队列中已经包含该元素,则移动左侧,直到之前队列中的该元素被移出队列,然后在新位置纳入该元素,继续向下搜索。没有在队列中找到该元素,则一直向后移动,将新元素添加到队尾,同时更新最大长度maxlen的值。初始时,队首队尾均在下标为0处,将首位元素加入列表,便于后续查找。其他数组最小的可能长度为1,初始化maxlen=1。,请你找出其中不含有重复字符的。因为无重复字符的最长子串是。直到右端到达数组尾,结束搜索。对于长度为0的数组单独处理。,所以其长度为 3。

2025-09-10 20:50:20 397

原创 leetcode17(长度最小的子数组)

对于该数组,从下标为0开始一直读入,直到读入数据之和大于或等于target,记录此时读入的数组长len。当读入数据之和大于或等于target时,将最早读入的数据移出,看是否依然大于或等于target。依然大于或等于target:继续移出下一位数据,记录更新len。小于target:读入刚刚未读入的下一位数据,也尝试更新len。重复该过程,直到数组内数字用尽,返回len。如果不存在符合条件的子数组,返回。是该条件下的长度最小的子数组。找出该数组中满足其总和大于等于。个正整数的数组和一个正整数。

2025-09-10 16:06:02 217

原创 leetcode16(盛最多水的容器)

如果移动高的一侧,由于两个指针均向中间靠拢,底边一定缩短,而移动高的一侧后,每次移动指针可以选择移动左侧或移动右侧,移动高的一侧或低的一侧。如果移动后储水量减小,则max不会受影响,如果增大,则取新的值。只有移动较短的一侧,才有可能找到更高的边长,找到更大的储水量。数组最左端和最右端设为初始位置,设为开始时的最大容量max。储水量一定会变小,所以不可能找到比当前最大容量更大的容量。用暴力搜索会超时,题解给出的方法是双指针。轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。

2025-09-09 21:52:28 254

原创 leetcode15( 两数之和 II - 输入有序数组)

2 与 7 之和等于目标数 9。因此 index1 = 1, index2 = 2。返回 [1, 2]。你所设计的解决方案必须只使用常量级的额外空间。,请你从数组中找出满足相加之和等于目标数。如果设这两个数分别是。如果求和大于目标值,则右侧指针前移。如果求和小于目标值,则左侧指针后移。的形式返回这两个整数的下标。以长度为 2 的整数数组。直到两个指针重合,搜索结束。思路:直接暴力搜索会超时。重复使用相同的元素。从数组两端开始,数组为。如果相等,则返回结果。

2025-09-09 21:28:52 536

原创 leetcode14(判断子序列)

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。每次找到后,以长字符串此位置为基准,继续向后寻找。以待寻找的子序列元素为基准,从前到后依次寻找。

2025-09-09 19:16:15 194

空空如也

空空如也

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

TA关注的人

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