- 博客(335)
- 收藏
- 关注
原创 LeetCode 二叉树题目详解(第1500-最后)
题目描述:判断二叉树是否满足奇偶树的条件:偶数层所有节点值为奇数且严格递增,奇数层所有节点值为偶数且严格递减。题目链接:https://leetcode.cn/problems/even-odd-tree/ 难度等级:中等解题思路: 使用广度优先搜索(BFS)进行层次遍历。对于每一层,检查节点值是否满足条件:偶数层节点值必须为奇数且严格递增,奇数层节点值必须为偶数且严格递减。时间复杂度:O(n) - 遍历所有节点 空间复杂度:O(w) - 队列宽度,最坏情况下为O(n)
2025-10-22 18:31:10
898
原创 二叉树(第300-1500道题)
题目描述:计算给定二叉树的所有左叶子之和。左叶子节点是指是左子节点且是叶子节点的节点。题目链接:https://leetcode.cn/problems/sum-of-left-leaves/ 难度等级:简单解题思路: 使用深度优先搜索(DFS)遍历二叉树。对于每个节点,检查其左子节点是否为叶子节点(即左子节点不为空,且左子节点的左右子节点均为空)。如果是,则将左子节点的值累加到总和中。然后递归处理左子树和右子树。时间复杂度:O(n),其中n是节点数。每个节点被访问一次。
2025-10-22 18:04:43
654
原创 LeetCode 301-310 题目详解
计算矩形面积:(maxRow - minRow + 1) × (maxCol - minCol + 1)给定一个二值图像,其中'1'表示黑色像素,'0'表示白色像素。累加数是一个字符串,组成它的数字可以形成累加序列(每个数字是前两个数字之和)。设计一个类,能够高效计算数组中索引left到right之间元素的和。删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。给定一个空的水域,逐个位置添加陆地,每次添加后返回当前岛屿数量。:O(k×α(m×n)) - k次操作,α是反阿克曼函数。
2025-10-21 16:48:27
308
原创 LeetCode 291-300 题详细解析
:给定一个只包含'+'和'-'的字符串,两人轮流操作,每次可以将两个连续的'+'翻转为'--'。这里的匹配是双向的,且模式中的每个字符必须映射到字符串中的一个非空子串。:给定一个只包含'+'和'-'的字符串,每次操作可以将两个连续的'+'翻转为'--',返回所有可能的操作结果。:给定一个网格,1表示朋友的位置,0表示空地。:根据秘密数字和猜测数字,返回提示:A表示数字和位置都正确,B表示数字正确但位置错误。使用两个堆:最大堆存储较小的一半数字,最小堆存储较大的一半数字,保持两个堆的大小平衡。
2025-10-13 12:56:57
371
原创 LeetCode 281-290 题详细解析
:给定一个m x n的网格,每个细胞有一个初始状态:1表示活,0表示死。:给定一个仅包含数字的字符串和一个目标值,在数字之间添加二元运算符(+、-或*),返回所有能够得到目标值的表达式。:给定一个m x n的网格,其中-1表示墙,0表示门,INF表示空房间。:给定一个包含n+1个整数的数组,数字在1到n之间,假设只有一个重复数字,找出这个重复数。:给定一个数组,将所有0移动到数组的末尾,同时保持非零元素的相对顺序。:设计一个数据结构,包含一个单词字典,判断给定单词的缩写是否唯一。
2025-10-13 12:51:28
283
原创 LeetCode 271-280 题详细解析
使用长度前缀编码方法:对于每个字符串,先记录其长度,然后加上分隔符,最后是字符串内容。:将数组重新排列成nums[0] <= nums[1] >= nums[2] <= nums[3]...的形式。先排序,然后从后向前遍历,找到最大的h使得citations[i] >= h。如果当前栅栏与前一个颜色不同:dp[i] = dp[i-1] * (k-1)如果当前栅栏与前一个颜色相同:dp[i] = dp[i-2] * (k-1):有n个栅栏,k种颜色,要求最多连续两个栅栏颜色相同,求涂色方案数。
2025-10-13 12:37:51
591
原创 LeetCode 261-270 题详细解析
:有一排房子,每个房子可以用k种颜色中的一种来粉刷,每个房子粉刷成不同颜色的花费不同。:给定编号从 0 到 n-1 的 n 个节点和一个无向边列表,判断这些节点能否形成一棵有效的树。动态规划优化,记录前一个房子的最小花费和次小花费,避免每次都要遍历所有颜色。:给定一个包含[0, n]中n个数的数组,找出数组中缺失的那个数字。方法1:数学公式 - 计算0到n的和,减去数组中所有数的和。:给定一个按外星字典序排序的单词列表,推断出字母的顺序。:找出第n个丑数(只包含质因数2、3、5的正整数)。
2025-10-13 12:29:26
285
原创 LeetCode 251-260 题详细解析
状态转移:dp[i][j] = costs[i][j] + min(dp[i-1][k]),其中k ≠ j。:设计一个迭代器,实现一个二维向量的展开,使其能够按顺序遍历二维向量中的所有元素。遍历会议,如果当前会议开始时间大于等于堆顶结束时间,可以复用会议室。:给定一个会议时间安排的数组,判断一个人是否能够参加所有会议。动态规划:dp[i][j]表示第i个房子刷第j种颜色的最小成本。检查每个会议的开始时间是否大于等于前一个会议的结束时间。:粉刷一排房子,相邻房子不能同色,求最小成本。
2025-10-13 11:50:44
770
原创 LeetCode 241-250 题详细解析
:给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。:中等:使用分治法和记忆化搜索。遍历字符串,当遇到运算符时,将表达式分成左右两部分,分别递归计算左右两部分的所有可能结果,然后根据当前运算符组合结果。:O(Catalan(n)),最坏情况是指数级:O(n²),用于存储中间结果。
2025-10-13 11:45:35
410
原创 LeetCode 231-240 题详细解析
:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。:给你一个整数数组 nums,返回数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。:编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。:给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。2的幂次方的二进制表示只有一个1,其他位都是0。:有一个单链表的节点,请编写一个函数删除该节点。
2025-10-13 11:22:42
304
原创 LeetCode 221-230 题详细解析
:给你二维平面上两个由直线构成且边平行于坐标轴的矩形,请你计算并返回两个矩形覆盖的总面积。pop:将主队列中除最后一个元素外的所有元素移到辅助队列,弹出最后一个元素,然后交换队列。:给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。:O(log²n),每次递归计算高度O(logn),递归深度O(logn),请你实现一个基本计算器来计算并返回它的值。:实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。:请你仅使用两个队列实现一个后入先出(LIFO)的栈。
2025-10-13 10:52:00
391
原创 LeetCode 211-220 题详细解析
搜索单词:最坏情况O(26^L),但实际中由于单词长度有限且不会全是'.',效率可接受。:找出所有k个数字的组合,数字从1-9中选择,和为n,每个数字最多使用一次。:O(M×N×4×3^(L-1)),其中M、N为网格大小,L为单词最大长度。:O(N×L),其中N为单词数,L为平均单词长度,主要用于存储字典树节点。:O(K×L),其中K为单词数,L为单词最大长度,主要用于存储字典树。:平均O(n),最坏O(n²),但随机化后期望为O(n)添加单词:O(L),其中L为单词长度,需要遍历每个字符。
2025-10-13 10:45:24
336
原创 LeetCode 201-210 题详细解析
这道题的关键观察是:对于连续数字的按位与操作,结果实际上是 left 和 right 的公共二进制前缀。因为从 left 到 right 的连续数字中,二进制表示的每一位都会经历从 0 到 1 的变化,只有那些在 left 和 right 中保持不变的位才会在结果中为 1。:给定两个整数 left 和 right,返回区间 [left, right] 内所有数字按位与的结果。Trie 树的每个节点包含子节点数组和结束标志,支持高效的前缀查询。:返回学习所有课程的顺序,如果不可能则返回空数组。
2025-10-13 10:19:58
1097
原创 LeetCode 191-200 题详解
:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。:编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。:给定一个二叉树的根节点root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。:给定一个包含电话号码列表的文件,编写一个bash脚本,打印所有有效的电话号码。
2025-10-08 21:52:32
1067
原创 LeetCode 181-190 题详解
:简单:编写一个SQL查询,该查询可以获取收入超过他们经理的员工的姓名。:使用自连接将员工表与经理表连接比较员工的薪水与经理的薪水选择员工薪水大于经理薪水的记录。
2025-10-08 21:52:06
554
原创 LeetCode 171-180 题详解
:编写一个SQL查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:FirstName, LastName, City, State。状态转移方程:dp[i][j] = max(1, min(dp[i+1][j], dp[i][j+1]) - dungeon[i][j]):编写一个SQL查询,获取Employee表中第n高的薪水。:给定一组非负整数nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。:给定一个整数 n,返回 n!
2025-10-08 21:48:05
570
原创 LeetCode 161-170 题详解
给你一个整数数组 nums,找到峰值元素并返回其索引。:给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。:给定一个排序的整数数组 nums,其中元素的范围在闭区间 [lower, upper] 内,返回缺失的区间列表。:给定两个字符串 s 和 t,判断它们是否只相差一个编辑操作(插入一个字符、删除一个字符或替换一个字符)。:给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。:给定一个大小为 n 的数组,找到其中的多数元素。
2025-10-08 21:46:53
820
原创 LeetCode 151-160 题详解
给你一个元素值互不相同的数组 nums,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。给你一个可能存在重复元素值的数组 nums,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。:给定一个二叉树,其中所有的右节点要么是具有兄弟节点(拥有相同父节点的左节点)的叶节点,要么为空。:给你一个整数数组 nums,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。:设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
2025-10-08 18:13:50
607
原创 LeetCode 151-160 题详解
给你一个元素值互不相同的数组 nums,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。给你一个可能存在重复元素值的数组 nums,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。:给定一个二叉树,其中所有的右节点要么是具有兄弟节点(拥有相同父节点的左节点)的叶节点,要么为空。:给你一个整数数组 nums,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。:设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
2025-10-08 18:10:44
940
原创 LeetCode 141-150 题详解
:给定一个单链表 L 的头节点 head,单链表 L 表示为:L0 → L1 → …→ Ln-1 → Ln。:给定一个链表的头节点 head,返回链表开始入环的第一个节点。请将其重新排列为:L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …:给你链表的头结点 head,请将其按升序排列并返回排序后的链表。:给你二叉树的根节点 root,返回它节点值的前序遍历。:给你二叉树的根节点 root,返回它节点值的后序遍历。:给你一个链表的头节点 head,判断链表中是否有环。
2025-10-08 17:45:48
795
原创 LeetCode 131-140 题详解
给定两个整数数组 gas 和 cost,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。:给定一个字符串 s 和一个字符串字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。:给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。:给你无向连通图中一个节点的引用,请你返回该图的深拷贝(克隆)。
2025-10-08 17:40:32
1299
原创 LeetCode 121-130 题详解
:按字典 wordList 完成从单词 beginWord 到单词 endWord 的转化,一个表示转换过程的序列是形式上像 beginWord -> s1 -> s2 -> ... -> endWord 这样的单词序列,并满足:每对相邻的单词之间仅有单个字母不同;:给你一个 m x n 的矩阵 board,由若干字符 'X' 和 'O' 组成,捕获所有被围绕的区域。:给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。从边界上的'O'开始DFS/BFS,标记所有相连的'O'
2025-10-08 17:27:24
1029
原创 LeetCode 111-120 题详解
:给定一个二叉树,填充它的每个 next 指针,让这个指针指向其下一个右侧节点。:给你二叉树的根节点 root 和一个整数目标和 targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。状态转移方程:dp[i][j] = min(dp[i+1][j], dp[i+1][j+1]) + triangle[i][j]如果s[i-1] == t[j-1],则dp[i][j] = dp[i-1][j-1] + dp[i-1][j]dp[i][j]表示从位置(i,j)到底部的最小路径和。
2025-10-08 17:12:16
562
原创 LeetCode 101-110 题详解
:给定两个整数数组 inorder 和 postorder,其中 inorder 是二叉树的中序遍历,postorder 是同一棵树的后序遍历,请你构造并返回这颗二叉树。:给定两个整数数组 preorder 和 inorder,其中 preorder 是二叉树的先序遍历,inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。:给定一个单链表的头节点 head,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。比较左子树的左节点与右子树的右节点,左子树的右节点与右子树的左节点。
2025-10-08 17:09:52
752
原创 LeetCode 91-100题详细解析(Java实现)
:一条包含字母 A-Z 的消息通过以下映射进行了编码:'A' -> "1", 'B' -> "2", ..., 'Z' -> "26"。例如,"11106" 可以映射为:"AAJF" (1,1,10,6),"KJF" (11,10,6)。注意,消息不能分组为 (1,11,06),因为 "06" 不能映射为 "F",这是由于 "6" 和 "06" 在映射中并不等价。使用递归方法,对于每个数字作为根节点,递归生成左右子树的所有可能组合,然后组合成完整的二叉搜索树。或者使用递归,传递当前节点的值范围。
2025-10-03 20:40:31
719
原创 LeetCode 81-90题详细解析(Java实现)
:给你一个链表的头节点 head 和一个特定值 x,请你对链表进行分隔,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前,并且保留两个分区中每个节点的初始相对位置。:给定一个已排序的链表的头 head,删除所有重复数字的节点,只留下原始链表中没有重复出现的数字。交换的情况:s1的前k个字符与s2的后k个字符是扰乱字符串,且s1的剩余字符与s2的前n-k个字符是扰乱字符串。不交换的情况:s1的前k个字符与s2的前k个字符是扰乱字符串,且s1的剩余字符与s2的剩余字符是扰乱字符串。
2025-10-03 20:34:50
732
原创 LeetCode 71-80题详细解析(Java实现)
:给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。使用栈来处理路径中的目录名。遍历网格中的每个单元格,从当前单元格开始,向四个方向搜索匹配的字符,使用visited数组记录已访问的单元格。否则,dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1。:给你一个有序数组 nums,请你原地删除重复出现的元素,使每个元素最多出现两次,返回删除后数组的新长度。
2025-10-03 20:29:35
851
原创 LeetCode 60-70题详细解析(Java实现)
状态转移方程:dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]。创建一个二维数组dp,其中dp[i][j]表示从起点到(i, j)的路径数。状态转移方程:dp[i][j] = dp[i-1][j] + dp[i][j-1]。:给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。dp[i] = dp[i-1] + dp[i-2],即到达第i阶楼梯的方法数等于到达第i-1阶和第i-2阶的方法数之和。
2025-10-03 18:26:20
1014
原创 LeetCode 50-60题详细解析(Java实现)
中文链接难度:简单题目描述:给你一个字符串 s,由若干单词组成,单词之间用空格隔开。返回字符串中最后一个单词的长度。如果不存在最后一个单词,请返回 0。解题思路:从字符串末尾开始向前遍历,先跳过末尾的空格,然后计算最后一个单词的长度。时间复杂度:O(n) - 最坏情况下需要遍历整个字符串空间复杂度:O(1) - 只使用常数空间// 跳过末尾空格i--;// 计算最后一个单词长度= ' ') {length++;i--;
2025-10-03 18:23:33
953
原创 LeetCode 41-50题详细解析(Java实现)
:这道题的关键是理解最小的正整数一定在[1, n+1]范围内,n是数组长度。关键点是理解乘法过程中每个数字的位置关系:num1[i] * num2[j] 的结果应该放在数组的 [i+j, i+j+1] 这两个位置。遍历数组时,我们更新能到达的最远位置,当到达当前边界时,增加跳跃次数并更新边界为当前能到达的最远位置。这是经典的回溯算法应用。:给你一个未排序的整数数组,找出其中没有出现的最小的正整数。:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
2025-10-03 18:22:26
865
原创 LeetCode 21-40题详细解析(Java实现)
题目描述:给定一个有序数组,找出目标值的开始位置和结束位置解题思路:使用两次二分查找,分别查找第一个位置和最后一个位置时间复杂度:O(log n)空间复杂度:O(1)// 查找第一个位置// 查找最后一个位置} else {return idx;
2025-10-03 18:05:25
756
原创 LeetCode 1-20题详细解析(Java实现)
:O(3^m * 4^n) - m是3字母数字个数,n是4字母数字个数。:O(n²) - 排序O(n log n),双指针O(n²):O(n²) - 排序O(n log n),双指针O(n²):O(log(min(m,n))) - 每次搜索范围减半。:O(min(n, m)) - m为字符集大小。:O(max(m,n)) - 遍历较长的链表。:O(max(m,n)) - 结果链表长度。:O(log(x)) - 与数字位数成正比。:O(log(n)) - 与数字位数成正比。
2025-10-03 18:00:17
975
原创 测试AI应用的多语言与本地化能力
在全球化市场中,AI应用的多语言能力(Multi-language)和本地化(Localization)质量直接决定了其用户体验和市场天花板。测试像“腾讯元宝”这类大型语言模型(LLM)应用,远不止简单的界面翻译验证,它是一项涵盖的复杂系统工程。本文将系统性地阐述一套可落地的测试方案。
2025-09-23 16:02:53
1041
原创 基于AI增强的电商用户体验主动监控体系
本文介绍了一种创新的AI驱动解决方案,旨在解决全球电商平台在多语言环境下保障核心交易链路用户体验的传统难题。该系统通过融合自然语言处理、行为序列分析与日志增强技术,实现了从被动告警到主动洞察的转变,有效提升了用户转化率与平台稳定性。
2025-09-20 14:49:30
583
原创 RocketMQ分布式消息中间件
Apache RocketMQ 是一款为现代互联网和分布式系统而生的、功能全面的消息中间件。历经考验:诞生于全球最复杂的电商场景,稳定性和性能毋庸置疑。功能全面:提供了事务、顺序、定时、过滤、回溯等几乎所有你能想到的消息功能。生态友好:对 Java/Spring 生态支持极好,易于上手和集成。中文支持:作为国产开源项目的佼佼者,拥有丰富的中文文档和社区支持。因此,如果你的业务场景涉及核心交易、金融支付、数据同步。
2025-09-12 18:30:08
663
原创 HSF框架
HSF 是一款诞生于世界级互联网公司内部、经过最严苛业务场景考验的企业级 RPC 框架。它的核心优势不在于开源和生态,而在于其无与伦比的稳定性、性能和在阿里云平台上的无缝集成体验。降低技术门槛:无需组建团队研究和维护复杂的分布式系统组件。提升开发效率:聚焦业务开发,快速搭建微服务架构。获得稳定性保障:直接享受来自阿里巴巴的最佳实践和基础设施能力。获得企业级支持:遇到问题时,有专业的阿里云技术支持团队作为后盾。
2025-09-12 17:48:28
1082
原创 Dubbo 框架
这个 JAR 包需要被服务提供者和消费者共同依赖。// 定义服务接口// 定义实体类(需实现 Serializable)Apache Dubbo 的核心价值在于:它不仅仅是一个 RPC 框架,更是一套完整的服务治理解决方案。对于传统企业级应用:Dubbo 提供了开箱即用的高性能 RPC 和丰富的治理功能,能极大地提升开发效率和系统稳定性。对于微服务架构:Dubbo 是构建微服务间通信的绝佳选择,其服务发现、负载均衡、容错机制是微服务的基石。对于云原生未来。
2025-09-12 17:47:02
1079
原创 MyBatis 基本概念
MyBatis 的核心价值在于:它找到了 SQL 可控性和开发效率之间的完美平衡点。最佳实践:始终使用 Mapper 接口 +@Mapper注解,而不是古老的SqlSession模板方法。简单 SQL 用注解,复杂 SQL(尤其是动态 SQL)用 XML。开启驼峰命名映射,让user_name自动映射到userName。使用 ResultMap 处理复杂关联映射,而不是自动映射。善用动态 SQL 来构建灵活可复用的查询。。
2025-09-12 15:50:33
874
原创 MyBatis XML 映射文件中的标签
始终指定resultType或resultMap:对于<select>语句,必须指定返回结果类型。优先使用#{}:防止 SQL 注入,除非必须使用${}(如动态表名、列名)。善用动态 SQL:使用<where><if>等标签构建灵活查询,避免在 Java 代码中拼接 SQL。复杂映射用resultMap:对于字段名和属性名不一致或有关联关系的情况,使用。使用<sql>片段:提取公共 SQL 部分,提高代码复用性和可维护性。谨慎使用缓存。
2025-09-12 15:47:21
634
原创 Spring 中的Bean基本概念
在 Spring 框架中,Bean 就是一个由 Spring IoC 容器实例化、组装和管理的对象。简单来说,Bean 就是 Spring 容器里的“员工”。容器是“公司”,它负责招聘(实例化)、培训(装配)、分配任务(管理)这些员工,而你作为“老板”(开发者),只需要告诉公司你需要什么样的员工,公司就会帮你安排好一切。你需要告诉 Spring 容器:“嘿,这是我的一个员工(Bean),请你来管理它。概念比喻说明Spring IoC 容器公司。
2025-09-12 13:38:31
707
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅