自定义博客皮肤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)
  • 收藏
  • 关注

原创 代码随想录训练营|一刷总结

研二下果断报了这一期算法训练营,按着卡哥安排的节奏和顺序来刷题,虽然中间也有好多次想放弃(尤其是刷到贪心这一章的时候),而且后面也有两次因为事情多不得不在周末补上一周的题目,但是最终还是坚持了下来,完成了一刷。虽然前面好多已经忘记了,但是却学到了超多超多知识,也逐渐有了一些解决复杂题目的思路。我觉得一刷最重要的不是背过多少题的代码,而是在这个过程中加深自己对各种数据结构的理解和操作,逐渐形成对复杂题目向所掌握知识的转化方法。一刷总是不够的,二刷即将开始!

2024-05-24 07:26:31 303

原创 代码随想录算法训练营第六十天|84.柱状图中最大的矩形

当找到左右两侧第一个比自己小的元素后,当前元素高度的柱子的宽度就确定下来。与接雨水类似,不过此题需要找左右两侧第一个比自己小的元素。

2024-05-21 11:07:57 230

原创 代码随想录算法训练营第五十九天|503.下一个更大元素II,42. 接雨水

使用单调栈遍历数组,如果当前元素小于等于栈顶元素,则将当前元素入栈;如果当前元素大于栈顶元素,则当前元素作为右侧柱子,栈顶元素作为中间柱子,栈顶下一个元素作为左侧柱子,这样高度为左右柱子高度中较小值-中间柱子高度,宽度为右侧柱子下标-左侧柱子下标。思路一:将数组拼接两次,然后使用单调栈求下一个更大元素,但是扩充数组为O(n)本质上也是求右侧第一个比自己大的元素。思路二:遍历时,直接模拟遍历两遍。

2024-05-21 10:46:35 171

原创 代码随想录算法训练营第五十七天|739. 每日温度,496.下一个更大元素 I

如果nums2的当前元素大于栈顶元素,则判断栈顶元素是否在nums1中出现过,如果出现则记录结果。使用单调栈遍历nums2的元素,使用map哈希表映射nums1中的元素和下标。求右侧第一个比自己大的元素的下标,使用单调栈存放元素下标,从栈头到栈尾递增。如果当前元素大于栈顶元素,该元素即为栈顶元素右侧第一个比自己大的元素的下标。如果nums2的当前元素小于等于栈顶元素,将该元素入栈;如果当前元素小于等于栈顶元素,则讲当前元素入栈;

2024-05-21 10:38:06 196

原创 代码随想录算法训练营第五十六天|647. 回文子串,516.最长回文子序列

dp数组:dp[i][j]表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。dp数组:dp[i][j]表示字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j],则当左右指针重合时,则未判断该处的值是否是要被删除的值。编写相向双指针方法代码时需要注意。

2024-05-21 10:24:24 370

原创 代码随想录算法训练营第五十五天|583. 两个字符串的删除操作,72. 编辑距离

dp数组:dp[i][j]表示以i - 1结尾的字符串word1,和以j - 1结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。dp数组:dp[i][j]表示以下标i - 1结尾的字符串word1,和以下标j - 1结尾的字符串word2,最近编辑距离为dp[i][j]。

2024-05-21 10:07:26 322

原创 代码随想录算法训练营第五十四天|392.判断子序列,115.不同的子序列

递推公式:如果s[i - 1] == t[j - 1],那么dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];如果s[i - 1]!= t[j - 1],那么dp[i][j] = dp[i - 1][j]递推公式:如果s[i - 1] == t[j - 1],那么dp[i][j] = dp[i - 1][j - 1] + 1;dp数组:dp[i][j]表示一下标i - 1结尾的字符串s,和以下标j - 1结尾的字符串t,相同的子序列的长度为dp[i][j]。

2024-05-21 09:14:19 162

原创 代码随想录算法训练营第五十三天|1143.最长公共子序列,1035.不相交的线,53. 最大子序和

递推公式:如果text1t[i - 1] == text2[j - 1],那么dp[i][j] = dp[i - 1][j - 1] + 1;= text2[j - 1],那么dp[i][j] = max(dp[i][j - 1], dp[i - 1][j])。dp数组:dp[i][j]表示长度为[0, i - 1]的字符串text1和长度为[0, j - 1]的字符串text2的最长公共子序列的dp[i][j]。递推公式:dp[i] = max(dp[i - 1] + nums[i], dp[i])

2024-05-21 09:04:27 298

原创 代码随想录算法训练营第五十二天|300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组

初始化:需要初始化dp[i][0]和dp[0][j],根据dp数组的定义,如果nums1[i] == nums2[0],则dp[i][0] = 1,如果nums1[0] == nums2[j],则dp[0][j] = 1。使用二维dp数组,dp[i][j]表示以下标i结尾的子数组(必须包含nums1[i])和以下标j结尾的子数组(必须包含nums2[j])的最长重复子数组长度。递推公式:如果nums1[i]与nums2[j]相等,则dp[i][j] = dp[i - 1][j - 1] + 1。

2024-05-13 21:40:39 171

原创 代码随想录算法训练营第五十天|309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费

题目链接:[309.最佳买卖股票时机含冷冻期(https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/)此题比较简单,只有两种状态:今天持有股票和今天未持有股票。只需要在今天卖出股票时减去手续费即可。

2024-05-12 21:11:56 264

原创 代码随想录算法训练营第四十九天|123.买卖股票的最佳时机III,188.买卖股票的最佳时机IV

与上一题类似,只是状态变为1 + 2 * k中,其中奇数表示买入,偶数表示卖出。

2024-05-12 12:13:42 309

原创 代码随想录算法训练营第四十八天|121. 买卖股票的最佳时机,122.买卖股票的最佳时机II

与上一题类似,但是在计算dp[i][1]时,前一天没有股票,在第i天买入一支股票,为dp[i - 1][0] - price[i],即在前一天没有股票的最大利润基础上买入股票。采用二维dp数组,dp[i][0]表示第i天交易完成后手里没有股票的最大利润,dp[i][1]表示第i天交易完后手里有一支股票的最大利润。递推公式:dp[i][0]可有两种状态推出,两者取最大值。dp[i][1]也可以由两种状态推出,两者取最大值。

2024-05-12 12:07:06 165

原创 代码随想录算法训练营第四十七天|198.打家劫舍,213.打家劫舍II,337.打家劫舍III

递推公式:dp[i] = max(dp[i - 1], dp[i - 2] + nums[i]),不偷房间i,则金额为dp[i - 1],偷房间i,则金额为dp[i - 2] + nums[i],两者中取最大值。对于中间结点的处理,如果偷中间结点,则最大金额为中间结点金额 + 不偷左结点最大金额 + 不偷右节点最大金额,如果不偷中间结点,则最大金额为左右结点偷或不偷的最大金额和。dp数组:dp[i]表示考虑下标i(包括i)以内的房屋,最多可以偷dp[i]。

2024-05-12 11:54:13 309

原创 代码随想录算法训练营第四十六天|139.单词拆分,多重背包,背包问题总结

代码随想录按背包类型分类:01背包、完全背包、多重背包等。01背包:遍历背包时从后向前遍历完全背包:遍历背包时从前向后遍历多重背包:将物品展开转换为01背包问题按所求问题分类:能否装满背包,背包最多装多少,装满背包有多少种方法,背包装满最大价值,装满背包所需最小物品数。能否装满背包:dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]),即01背包问题中价值和重量相同,装完背包后,最大价值与背包容量相同则可以装满背包。

2024-05-12 11:42:20 474

原创 代码随想录算法训练营第四十五天|70. 爬楼梯(进阶版),322. 零钱兑换,279.完全平方数

完全背包问题,dp[j] = min(dp[j-coins[i]] + 1, dp[j]),即钱数减去当前硬币的金额所需要的最小硬币数再加一,并且取最小值。完全背包问题,物品为每次可以爬的台阶数,背包容量为所需要爬的台阶数,求装满该背包有多少种方法,而且需要考虑顺序。与上一题类似,完全背包问题。

2024-05-12 11:23:12 212

原创 代码随想录算法训练营第四十四天|完全背包,518. 零钱兑换 II,377. 组合总和 Ⅳ

01背包的滚动数组解法中,遍历背包时从后向前遍历确保每个物品只使用一次,若从前向后遍历,则每个物品可以使用多次,称为完全背包。与上一题类似为完全背包问题,但是需要考虑每个数字的顺序,因此先遍历背包,再遍历物品。每个硬币可以使用多次,为完全背包问题,不考虑硬币顺序,因此先遍历物品,再遍历背包。

2024-05-05 21:34:49 254

原创 代码随想录算法训练营第四十三天|1049. 最后一块石头的重量 II,494. 目标和,474.一和零

1049. 最后一块石头的重量 II代码随想录动态规划之背包问题,这个背包最多能装多少?LeetCode:1049.最后一块石头的重量II。

2024-05-05 21:28:12 991

原创 代码随想录算法训练营第四十二天|01背包问题,你该了解这些!,01背包问题,你该了解这些! 滚动数组,416. 分割等和子集

将问题转化为01背包问题,背包的体积为sum / 2;背包放入物品的重量为元素的数值,价值也为元素的数值;背包正好装满,说明找到了总和为sum / 2的子集;背包中每一个元素不可重复放入。由于二维数组dp[i][j]中,第i行只用到了第i - 1行的数据,因此可以把dp[i - 1]行的数据拷贝到dp[i]行上。

2024-04-30 12:00:25 263

原创 代码随想录算法训练营第四十一天|343. 整数拆分,96.不同的二叉搜索树

【代码】代码随想录算法训练营第四十一天|343. 整数拆分,96.不同的二叉搜索树。

2024-04-30 11:48:02 185

原创 代码随想录算法训练营第三十九天|62.不同路径,63. 不同路径 II

【代码】代码随想录算法训练营第三十九天|62.不同路径,63. 不同路径 II。

2024-04-30 11:38:45 284

原创 代码随想录算法训练营第三十八天|动态规划理论基础,509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯

【代码】代码随想录算法训练营第三十八天|动态规划理论基础,509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯。

2024-04-30 11:32:23 425

原创 代码随想录算法训练营第三十七天|738.单调递增的数字,968.监控二叉树

很容易想到要从叶子结点的父节点开始每隔两个结点放一个摄像头为局部最优,但是怎样表示一个结点的状态(有摄像头,没有摄像头但被摄像头覆盖,没有摄像头也没有被摄像头覆盖)是个难点。数要尽可能的大,高位开始尽量不变,从低位开始找到不满足递减的第一个位置,当前位置减1,后面的全都变成9即可。表示没有摄像头也没有被摄像头覆盖,表示没有摄像头但被摄像头覆盖。后序遍历递归返回值选择。

2024-04-25 21:22:43 438

原创 代码随想录算法训练营第三十六天|435. 无重叠区间,763.划分字母区间,56. 合并区间

按照右端点(会议结束时间排序),然后每次都寻找最早结束的会议添加到结果中,这样所有的会议都是没有重叠的,总的会议数减没有重叠的会议,就是去掉的会议数。从头遍历字符,并更新字符的最远出现下标,如果当前字母的下标与最远下标相同,则说明找全了前面一段字符串中出现的所有字符,即分割点。想象为一段时间内预定会议室,不能有冲突,那么我们需要找到最早结束的会议,这样留给后面的时间更长。如果当前区间左端点位于前一段连续区间内部,则区间重叠,更新当前连续区间。按照区间左端点进行排序,然后遍历所有区间。

2024-04-25 21:03:43 265

原创 代码随想录算法训练营第三十五天|860.柠檬水找零,406.根据身高重建队列, 452. 用最少数量的箭引爆气球

将气球按照左端点从小到大排序,然后遍历气球,如果当前气球与前一个气球没有重叠,则箭数加一,即当前气球需要单独射;如果当前气球与前一个气球有重叠,则求出当前气球与前一个气球重叠的最小右边界,设置为当前气球的右边界,此时前一个气球的左边界和当前气球的右边界就是当支箭可以射的范围。如果收到20美元,则优先找零一张10美元和一张5美元,如果找不开则找三张5美元。收到20美元的情况中,因为5美元更万能,所以优先保留5美元。按照身高进行从大到小排序,如果身高相同,则按照人次从小到大排序。每次只射重叠最多的气球。

2024-04-23 20:54:42 301

原创 代码随想录算法训练营第三十四天|1005.K次取反后最大化的数组和,134. 加油站,135. 分发糖果

如果每天剩油量累加和出现小于0的情况,则记录最小值,则从终点向回遍历补充剩油量直至大于等于0,此点为起点。从此起点开始到0的路段剩余油量补充了从0开始到出现剩余油量最小值的路段。从后向前遍历,如果左边孩子得分大于右边孩子,则左边孩子的糖果数为自身糖果数与右边孩子糖果数加一两者的较大值。从前向后遍历,如果右边孩子得分大于左边孩子,则右边孩子的糖果数为左边孩子糖果数加一;如果每天剩油量累加和没有小于过0,则从0开始可以跑一圈;每次只考虑一边,即两个孩子,先比较左边,然后再比较右边。每次都排序,取反最小值。

2024-04-23 20:46:24 392

原创 代码随想录算法训练营第三十二天|122.买卖股票的最佳时机II,55. 跳跃游戏,45.跳跃游戏II

如上图,第一步最大跳两步能到达2的位置,那么在这两步之内的所有步数的下一次能够到达的最大范围是最大步数内所有步数的下一次能够覆盖距离的和,即1和2位置所能跳跃步数的和。不考虑每次跳几步,只考虑每次可以跳跃的最大步数,不断更新最大能够覆盖的范围,看最大范围能够到终点。每次都走最多的步,计算最大步数之内所有步数能够覆盖的最大范围,下一次走覆盖范围的最大步数。如果此时利润最高,只需要每相邻两天之间的利润是正值,把所有正值相加即可。在低价的时候买入,在连续天数内的最高价时卖出。

2024-04-21 20:26:34 314

原创 代码随想录算法训练营第三十一天|理论基础,455.分发饼干,376. 摆动序列,53. 最大子序和

类似滑动窗口,不断扩大窗口的后端,直到窗口内的和小于0,这时更新窗口前端。因为当窗口内的和小于0时再扩大窗口,则原窗口内的负值会拉低新加入窗口的值。定义一个保存最大值变量的值,如果当前窗口内的和大于最大值,则更新最大值。数组首尾两端:假设数组最前面还有一个数字与数组第一个元素相同.贪心算法没有固定的套路,一般是从局部最优推到全局最优。上下坡之间的平坡:只需保留平坡中的最左或最右侧一个值。峰值点的寻找方法:三个点,前两个点递增(或递减)单调坡度有平坡:在坡度摆动变化的时候更新。全局最优:满足孩子数量最多。

2024-04-21 20:12:31 210

原创 代码随想录算法训练营第三十天|332.重新安排行程,51. N皇后,37. 解数独

变量存放到达该目的地的航班次数,每到达一次该目的地,次数减一,只有当次数大于0的时候才能到达此目的地,否则会造成两个地点间的循环。循环)代表遍历每列(每行),树的深度(递归)代表遍历每行(每列),如果皇后放置在此处合法,则进行递归回溯,否则跳过当次循环。关键是找到一种数据结构存储机票信息,并且能根据目的地的字母顺序进行排序。结构存储机票,而一个出发地可能对应着多个目的地,所以。因为要对每个空格子进行1-9的判断,所以要使用两层。的位置,1-9都判断完后没有符合条件的,则返回。中,键存放目的地,值使用一个。

2024-04-18 21:38:57 387

原创 代码随想录算法训练营第二十九天|491.递增子序列,46.全排列,47.全排列 II

数层去重的本质是在当前层判断该元素有没有被使用过,如果当前层该元素使用过,那么就重复了,因此可以在每一层都定义一个哈希表,代表某个元素是否被使用过来判断是否重复,这样每层都重新定义不会影响递归。该题目首先需要上一题的树枝去重,在树枝上同一个元素不能重复使用。该题目也需要数层去重,但是不能对原数组进行排序,所以。中为1,则表示该元素已经被使用过,即树枝上重复。同时也要避免其他相同元素的重复,即数层去重。数组表示某个元素是否使用过,如果。该题目需要树枝去重,同样定义。中数层去重的思路不再适用。

2024-04-17 20:42:01 208

原创 代码随想录算法训练营第二十八天|93.复原IP地址,78.子集,90.子集II

如果已插入’.'的数量为3时,判断一下剩余的数值是否合法,若合法则将该分割法插入结果数组,否则继续回溯。首先写一个判断数值是否大于255的函数,函数中按照逐位乘10相加的形式,当数值大于255时立刻返回。变量存储数组每个元素是否使用,如果当前选取的元素与前一个元素相同,且前一个元素未被使用时,则重复。抽象为树形结构后,收集树的所有结点,注意不能重复选取。数层去重类似,首先对数组进行排序,然后定义一个。,若直接使用字符串转数值,可能会溢出。每次判断数值合法时,在间隔点插入。类似,寻找间隔点插入。

2024-04-17 20:30:43 225

原创 代码随想录算法训练营第二十七天|39. 组合总和,40.组合总和II,131.分割回文串

是否为0,若为0,表示当前数的前一个数没用过,即横向方向上,跳过此次循环;若为1,表示当前数的前一个数用过,即纵向方向上,不进行去重操作。该题为分割题型,但与组合题型类似,组合题是选择某个下标的元素,而分割题是选择某个下标之前的元素。首先排序数组,然后进行回溯,回溯时需要在横向方向上进行去重,纵向方向不去重。横向方向上,选择不同切割位置;纵向方向上,进行下一次切割。变量,其中每一位代表数组中对应下标位置的数是否用过,当。剪枝:对数组进行排序,然后使用回溯算法,当。时,将该路径添加至结果数组。

2024-04-15 22:30:47 139

原创 代码随想录算法训练营第二十五天|216.组合总和III,17.电话号码的字母组合

转化为树形结构,数的横向遍历表示数字所代表的字母集合中的每一个字母,树的纵向遍历表示遍历每个数字所代表的字母集合。定义一个数组,数组中对应下标处存放该下标数字所对应的字母。循环遍历该字母集合代表数的横向遍历。递归操作为遍历下一个数字。循环之前,取出当前数字所对应的字母集合,问题类似,只是集合变为了数字1-9。

2024-04-14 20:58:54 151

原创 代码随想录算法训练营第二十四天|回溯算法理论基础,77. 组合

回溯问题可以抽象为树形结构,集合的大小构成树的宽度,递归的深度构成树的深度。如果集合中所能够选择的元素数量构不成所要求的组合,那么终止递归。树的横向遍历为选择集合中的元素,数的纵向遍历为压缩选择范围。,则当左右指针重合时,则未判断该处的值是否是要被删除的值。回溯算法本质是穷举,但可以避免敲n多个函数嵌套的代码。编写相向双指针方法代码时需要注意。

2024-04-12 19:40:17 284

原创 代码随想录算法训练营第二十三天|669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树

前序遍历,如果遇到小于区间左端点值的结点,则遍历该结点的右节点,直到找到在区间内的结点并返回;如果遇到大于区间右端点值得结点,则遍历该节点得左结点,直到找到在区间内的结点并返回。构造二叉树本质是寻找分割点,分割点作为当前结点,然后递归左右区间。为了构造平衡二叉树,分割点选择区间的中间位置。右中左的顺序遍历二叉树,使用全局变量记录累加和即可。

2024-04-12 19:25:56 227

原创 代码随想录算法训练营第二十二天|235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点

如果要删除的结点的左右结点都不为空,则删除节点,将左子树放到右子树的左下角,或者将右子树放到左子树的右下角,返回删除节点的右节点或左结点。根据二叉搜索树是有序树的性质,遍历结点,如果结点值介于p和q值之间(可以取等号),则说明该结点为最近公共祖先,否则向二叉树一侧遍历即可。如果要删除的结点的左结点(右节点)为空,则删除结点,同时返回右节点(左结点)如果要删除的结点为叶子结点,直接删除结点,返回当前结点为NULL。按照新值和二叉搜索树的性质,找到为NULL处插入即可。如果没有找到要删除的结点,直接返回。

2024-04-10 21:38:21 270 1

原创 代码随想录算法训练营第二十一天|530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数,236. 二叉树的最近公共祖先

中序遍历二叉搜索树,记录相同元素出现次数,与当前最大出现次数进行比较,如果等于当前最大出现次数,将该结点的值放入结果数组;如果大于当前最大出现次数,则将该结点的值放入结果数组并更新当前最大出现次数。使用后序遍历回溯,如果一个结点的左子树出现结点p(q),并且右子树出现结点q§,则该节点为p和q的最近公共祖先。遍历二叉搜索树,使用哈希表记录每个数值和出现的次数,然后根据出现的次数对数组进行排序,返回出现次数最高的值。通过一个指针记录当前结点的前一个结点,然后进行中序遍历,计算当前结点与前一个结点的绝对差。

2024-04-10 21:04:00 323 1

原创 代码随想录算法训练营第二十天|654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树

搜索二叉树的中序遍历结果是有序的,因此可以对二叉树进行中序遍历,将遍历结果保存到数组中,再判断数组是否有序,或者在中序遍历时直接比较当前结点值和前一个结点值。递归遍历两棵树,如果一棵树结点存在,另一棵树结点不存在,则返回存在的结点,如果两棵树结点都存在,则将结点2的值加到结点1上。对于搜索二叉树,因为搜索二叉树有序,所以再普通二叉树递归遍历的基础上,只需要比较目标值和当前结点值,进行一侧遍历即可。前序遍历,首先遍历数组找到最大值,构造根结点,然后以最大值为分割点分割数组,递归即可。

2024-04-08 20:36:15 272

原创 代码随想录算法训练营第十八天|513.找树左下角的值,112. 路径总和 ,113.路径总和ii,106.从中序与后序遍历序列构造二叉树,105.从前序与中序遍历序列构造二叉树

使用递归寻找最底下一层且处于最左侧叶子结点的值,最底下一层的叶子结点即深度最大的叶子结点,可以用回溯的方法求当前结点的深度,对于最左侧叶子结点,前中后序遍历都是先遍历最左边,然后遍历右边,所以每次遍历到深度大于已遍历过的深度最大值结点时,更新结果值就是最左侧的值。后序数组的最后一个元素为根结点,以该元素为分割点分割中序数组,中序数组左侧为左子树上的结点,中序数组右侧为右子树上的结点,根据分割后的中序数组分割后序数组,然后分别进行递归。使用层序遍历迭代,每次开始处理新的一层前,将最左侧结点的值赋给。

2024-04-06 21:01:18 282 1

原创 代码随想录算法训练营第十七天|110.平衡二叉树,257. 二叉树的所有路径,404.左叶子之和

使用后序遍历递归,在处理中间结点时,判断当前结点的左结点是否为叶子结点,如果是叶子结点则将该结点的值加到。使用后序遍历,求出以各结点为根结点的左右子树的高度,如果右左右子树高度差大于1,则返回。,则当左右指针重合时,则未判断该处的值是否是要被删除的值。变量记录当前路径,当遇到叶子结点时,将当前路径加入。数组中,在递归时,将path回溯至入递归前。,如果所有左右子树高度差都小于1,则返回。编写相向双指针方法代码时需要注意。使用前序遍历递归,同时用一个。

2024-04-06 16:57:38 209 1

原创 代码随想录算法训练营第十六天|104.二叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数

一般前序遍历用来求深度,后序遍历用来求高度,根节点的高度就是二叉树的最大深度,因此本题既可以用后序遍历也可以用前序遍历。可以当作普通二叉树使用层序遍历或者递归的方式求解,也可以使用完全二叉树的性质求解。根节点的最小深度也就是根节点的最小高度,使用后序遍历。

2024-04-05 10:24:06 265 1

空空如也

空空如也

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

TA关注的人

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