自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。求在该柱状图中,能够勾勒出来的矩形的最大面积。

2023-11-23 13:05:50 86 1

原创 代码随想录算法训练营Day 59 || 503.下一个更大元素II、42. 接雨水

给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。第一次遍历找到每个元素右侧的第一个更大的元素,第二次遍历用来找到那些在数组末尾但它们的更大元素在数组开头的情况。:在遍历的过程中,每次我们考察一个新元素时,我们检查栈顶元素代表的数组值是否小于当前元素。来存储结果,初始时该数组的所有值设为 -1(表示没有找到下一个更大的元素)。

2023-11-23 12:37:50 47

原创 代码随想录算法训练营Day 57 || 739. 每日温度、496.下一个更大元素 I

例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。对于 num1 中的数字 4 ,你无法在第二个数组中找到下一个更大的数字,因此输出 -1。对于 num1 中的数字 2 ,第二个数组中没有下一个更大的数字,因此输出 -1。输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输入: nums1 = [2,4], nums2 = [1,2,3,4].

2023-11-18 18:25:37 113

原创 代码随想录算法训练营Day 56 || 647. 回文子串、516.最长回文子序列

给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "bbbb"。示例 2: 输入:"cbbd" 输出: 2 一个可能的最长回文子序列为 "bb"。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。对于每个可能的“中心点”,向两边扩展,检查以该中心为对称轴的子串是否为回文。给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。提示:输入的字符串长度不会超过 1000。

2023-11-18 18:02:41 170

原创 代码随想录算法训练营Day 55 || 583. 两个字符串的删除操作、72. 编辑距离

解释: intention -> inention (删除 't') inention -> enention (将 'i' 替换为 'e') enention -> exention (将 'n' 替换为 'x') exention -> exection (将 'n' 替换为 'c') exection -> execution (插入 'u')解释: horse -> rorse (将 'h' 替换为 'r') rorse -> rose (删除 'r') rose -> ros (删除 'e')

2023-11-18 17:05:45 176

原创 代码随想录算法训练营Day 54 || 392.判断子序列、115.不同的子序列

力扣题目链接(opens new window)给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例 1:示例 2:提示:两个字符串都只由小写字符组成。115.不同的子序列力扣题目链接(opens new window)给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。字符串的一个 子序列 是指

2023-11-18 16:41:03 74

原创 代码随想录算法训练营Day 53 || 1143.最长公共子序列、1035.不相交的线、53. 最大子序和

创建一个二维数组。

2023-11-16 23:09:40 975

原创 代码随想录算法训练营Day 52 || 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

创建一个二维数组。

2023-11-16 22:12:11 113

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

给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格;非负整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。这个问题的特别之处在于引入了一个“冷冻期”的概念,即在卖出股票的次日,不能进行股票的买入。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格。返回获得利润的最大值。

2023-11-11 22:15:06 139

原创 代码随想录算法训练营Day 49 || 123.买卖股票的最佳时机III 、188.买卖股票的最佳时机IV

由于最多可以进行两笔交易,我们需要跟踪四个状态:第一次买入(

2023-11-11 22:02:52 567

原创 代码随想录算法训练营Day 48 || 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

输出:6 解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3。随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4-1 = 3。考虑到每一次完整交易至少需要两天(一天买入,一天卖出),所以在最极端的情况下,最多也只能进行 `n/2` 次交易(比如在股价连续上涨的情况下,第一天买入,第二天卖出,如此反复)。,这是按照这个策略可以获得的最大利润。

2023-11-11 21:52:31 64

原创 代码随想录算法训练营Day 47 || 198.打家劫舍、213.打家劫舍II、337.打家劫舍 III

在Python中,这可以通过使用递归函数实现,它返回一个包含两个元素的元组,分别代表不偷当前节点时的最大值和偷当前节点时的最大值。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,能够偷窃到的最高金额。对于数组中的每个元素。

2023-11-09 19:42:47 90

原创 代码随想录算法训练营Day 46 || 139.单词拆分、多重背包

“139. 单词拆分” 是一个经典的动态规划问题,具体描述如下:给定一个非空字符串 和一个包含非空单词的列表 ,判定 是否可以被空格拆分为一个或多个在字典中出现的单词。字符串 可以被空格拆分成一系列字典中出现的单词,单词可以在字典中重复使用多次,并且可以使用字典中全部的单词。示例:解题步骤 定义状态:初始化状态:状态转移方程:填充动态规划表:返回结果:在这个代码中, 数组用来存储字符串 的每个子字符串是否可以被拆分。通过从前往后的动态规划方法,我们逐步构建出哪些部分的字符串可以由

2023-11-07 22:22:12 36

原创 代码随想录算法训练营Day 45 || 70. 爬楼梯 、322. 零钱兑换 、279.完全平方数

定义状态:初始条件:状态转移方程:计算方法:优化:在这个代码中, 和 分别代表达到当前楼梯前两阶的方法数。循环开始时, 和 分别初始化为达到第一阶和第二阶的方法数。然后,通过迭代更新这两个变量,直到计算出达到第 阶的方法数。"322. 零钱兑换"问题是一个经典的动态规划问题,类似于完全背包问题。在这个问题中,你需要找到最少的硬币数目,使得它们的总金额等于给定的数额。如果没有任何一种硬币组合能组成总金额,返回 。问题描述如下:给定不同面额的硬币 和一个总金额 。编写一个函数来计算可以凑成总金额所

2023-11-07 22:02:27 26

原创 代码随想录算法训练营Day 43 || 完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ

完全背包问题是动态规划中的一个典型问题,与0-1背包问题相似,但有一个关键的区别:在完全背包问题中,每种类型的物品可以选取无限次,而在0-1背包问题中,每种物品只能选取一次。问题定义: 给定一个固定大小的背包和一系列物品,每种物品都有自己的重量和价值,求在不超过背包容量的前提下,背包中物品的最大价值总和。解题步骤:确定状态:初始化状态:状态转移方程:计算顺序:优化空间复杂度:零钱兑换 II 问题是一个经典的动态规划问题,也被认为是完全背包问题的变体。在这个问题中,你被给定一些不同面额的硬币和一个总金额,你需

2023-11-07 21:51:14 26

原创 代码随想录算法训练营Day 42 || 1049.最后一块石头的重量II、494.目标和、474.一和零

力扣题目链接(opens new window)题目难度:中等有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回 0。输入:[2,7,4,1,8,1]输出:1。

2023-11-07 17:52:37 20

原创 代码随想录算法训练营Day 41 || 01 背包问题、滚动数组、416. 分割等和子集

01背包问题是一种典型的组合优化问题,它可以描述为:给定一组物品,每种物品都有自己的重量和价值,在限定的最大重量内,选择若干物品装入背包,使得包内物品的总价值最大。问题可以形式化为:假设有\( N \)件物品和一个容量为\( W \)的背包。第\( i \)件物品的重量是\( w_i \),其价值为\( v_i \)。求解将哪些物品装入背包可使这些物品的总价值最大,同时不超过背包的容量。

2023-11-02 22:05:05 31

原创 代码随想录算法训练营Day 40 || 343. 整数拆分、96.不同的二叉搜索树

首先,我们需要理解什么是二叉搜索树(Binary Search Tree,简称 BST)。每个节点都有一个值。任何节点的值都比它左子树上所有节点的值大。任何节点的值都比它右子树上所有节点的值小。每一棵左右子树也都是二叉搜索树。

2023-11-02 12:10:30 26

原创 代码随想录算法训练营Day 39 || 62.不同路径、63. 不同路径 II

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。机器人试图达到网格的右下角(在下图中标记为“Finish”)。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。那么从左上角到右下角将会有多少条不同的路径?解释: 从左上角开始,总共有 3 条路径可以到达右下角。网格中的障碍物和空位置分别用 1 和 0 来表示。

2023-10-31 22:41:25 115

原创 代码随想录算法训练营 Day 38 || 509. 斐波那契数、70. 爬楼梯 、746. 使用最小花费爬楼梯

我们可以定义一个数组dp,其中dp[i]表示斐波那契数列的第i个值。

2023-10-31 22:26:26 27

原创 代码随想录算法训练营Day 36 || 738.单调递增的数字、968.监控二叉树

这意味着当前节点已经被覆盖了,但是不需要在上面放摄像头,因为它的子节点已经有摄像头了。给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。我们递归地处理左子节点和右子节点,然后根据子节点的状态来决定当前节点的状态。,这意味着当前节点必须有一个摄像头,因为只有当前节点上的摄像头才能覆盖这些。给定一个二叉树,我们在树的节点上安装摄像头。如果当前的节点是空的,则它自动被认为是。如果左子节点或右子节点中的任何一个是。如果左子节点或右子节点中的任何一个是。

2023-10-29 23:04:37 24

原创 代码随想录算法训练营Day 35 || 435. 无重叠区间、763.划分字母区间、56. 合并区间

这一步是非常关键的,因为你希望尽可能地让更多的区间能够适应,这就需要关注区间的结束时间,给其他的区间留出更多的空间。例如,如果有区间 [1,3] 和 [2,4],保留 [1,3] 会更有意义,因为它结束得更早,留给后面的区间更多的空间。根据我们的贪心策略,我们应该保留结束时间更早的那个区间,因为这样可以为后续的区间留出更多的空间。这个问题的关键是如何在保留尽可能多的区间的同时,消除所有的重叠。给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。给出一个区间的集合,请合并所有重叠的区间。

2023-10-28 20:19:01 31

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

可以射出的弓箭的数量没有限制。这就是代码的思路,通过排序气球的结束坐标,然后遍历气球列表,根据贪心策略来确定是否需要再射一支箭,以确保用最少的箭引爆所有气球。然后是第三个气球,坐标是[7, 12],但这个气球的开始坐标7大于箭的位置6,所以我们需要再射一支箭,箭的位置更新为12。我们开始遍历气球列表,第一个气球的坐标是[1, 6],它的开始坐标1小于等于箭的位置6,所以我们不需要再射一支箭。接着,我们看第二个气球,坐标是[2, 8],它的开始坐标2也小于等于箭的位置6,所以我们也不需要再射一支箭。

2023-10-26 10:52:55 23

原创 代码随想录算法训练营Day 29 || 332.重新安排行程、51. N皇后、37. 解数独

"N 皇后"问题是一个经典的回溯算法问题,其目标是在一个 n×n 的棋盘上放置 n 个皇后,使得它们不互相攻击。因此,在返回答案之前,需要将行程反转。当我们到达某个机场后发现没有办法继续前进(即没有后续机票),或者已经用完了所有机票,我们就把当前机场记录下来,并返回到上一个机场,尝试其他可能的路径。如果找到一个位置可以放置皇后,就将该位置标记为"Q",表示皇后的位置,然后进入下一行继续尝试放置下一个皇后。在搜索的过程中,每访问一个机场,就将该机场从邻接表中的当前机场列表中移除,并递归访问新的机场。

2023-10-25 15:57:50 26

原创 代码随想录算法训练营Day 28 || 491.递增子序列、46.全排列、47.全排列 II

想象你面前摆放着一些数字,每次你都从中选一个放入结果序列中,然后从剩余的数字中再选一个,如此重复,直到数字被选完,这样你得到了一个全排列。我们可以使用一个方法来避免生成重复的排列:首先对数字进行排序,然后在决策过程中,如果发现当前数字与前一个数字相同,我们就跳过这个选择。总的来说,我们通过递归地选择每一个数字,并在每次选择后递归处理剩下的数字,生成了所有的排列。我们知道,如果当前数字和前一个数字相同,并且前一个数字在这一层没有被选择过,那么选择当前数字会产生与选择前一个数字相同的排列。

2023-10-25 14:36:04 22

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

你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。: 在翻转所有的负数后,如果K仍然是奇数(这意味着您还可以进行奇数次翻转),那么您应该将数组中的最小绝对值元素翻转(因为我们已经翻转了所有的负数,所以现在所有的数都是非负的)。这个例子展示了为什么我们在翻转完所有负数后,如果还有剩余的翻转次数,我们会选择翻转绝对值最小的元素。因为在所有正数中,1的绝对值是最小的,翻转它对总和的影响最小。然后,如果还有剩余的翻转次数,我们只翻转最小的值,因为这会最小化对总和的负面影响。

2023-10-25 11:47:53 19

原创 代码随想录Day 32 || 122.买卖股票的最佳时机 II、55. 跳跃游戏、45.跳跃游戏 II

具体来说,我们可以遍历整个数组,并在所有可到达的位置中更新最远可到达的位置。如果最远可到达的位置大于等于数组的最后一个位置,那么就意味着我们可以到达数组的最后一个位置。具体来说,我们可以遍历价格数组,对于数组中的每一个价格,都和前一天的价格进行比较。我们这样做是因为到达更远的位置可能会为后续的跳跃提供更好的选择,从而减少总的跳跃次数。当我们到达当前的跳跃边界时,我们知道需要进行另一个跳跃,并更新跳跃边界为可以达到的最远位置。我们的目标是以最少的跳跃次数从数组的开始位置(下标0)跳到最后位置(下标4)。

2023-10-25 10:54:50 22

原创 代码随想录算法训练营Day 31 || 455.分发饼干、376. 摆动序列 、53. 最大子序和

例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。如果当前数字小于前一个数字,并且前一个趋势是上升或者是序列的开始,那么我们同样找到了一个转折点。如果当前数字大于前一个数字,并且前一个趋势是下降或者是序列的开始,那么我们找到了一个转折点。摆动子序列的特点是它的数字是上升和下降交替的。

2023-10-25 09:47:09 26

原创 代码随想录算法训练营Day 27 || 93.复原IP地址、78.子集、90.子集II

它的目标是把一个包含3个点分隔的字符串s(比如"1.1.1")恢复成可能的IP地址列表。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效的 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效的 IP 地址。这个算法的基本思想是遍历数组中的每个元素,将其添加到当前的子集中,并递归地生成包含该元素的所有子集。给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。

2023-10-20 22:49:52 23

原创 代码随想录算法训练营Day 26 || 39. 组合总和、40.组合总和II、131.分割回文串

然后,我们回溯到上一步,尝试下一个数(比如6、7等),但是因为这些数都会使得当前和大于目标和,所以我们可以直接结束搜索。然后,我们回溯到上一步,尝试下一个数(比如2、7等),但是因为这些数都会使得当前和大于目标和,所以我们可以直接结束搜索。通过这样的过程,我们最终可以找到所有可能的组合:[[1, 1, 6], [1, 2, 5], [1, 7], [2 ,6]]。这次,因为起始索引已经到达字符串的末尾,所以我们将当前路径(即 [“a”, “a”, “b”])添加到结果列表中。

2023-10-18 14:46:29 23

原创 代码随想录算法训练营Day 25 || 216.组合总和III、17.电话号码的字母组合

通过这样的过程,我们最终可以找到所有可能的组合:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]。在这个新的函数调用中,因为当前处理的数字的索引等于数字字符串的长度,所以我们知道已经处理完了所有的数字,并得到了一个有效的组合"ad"。函数调用中,我们同样会找到下一个数字3对应的所有可能的字母"def",然后逐一尝试添加到当前的组合中,并继续递归调用。首先,我们找到数字2对应的所有可能的字母"abc",然后逐一尝试添加到当前的组合中,并递归调用。

2023-10-18 13:37:50 30

原创 代码随想录算法训练营Day 24 || 回溯算法理论基础、第77题. 组合

这时,已经选择的数的数量加上剩余可选的数的数量小于k,所以我们就知道无论如何也不可能找到有效的组合了,因此可以直接结束搜索。回溯算法的基本思想是通过递归的方式,不断地尝试所有可能的选择,当发现当前选择不符合要求时,就回溯到上一步,尝试其他的选择,直到找到满足条件的解或者穷尽所有可能的选择。通过这样的过程,我们最终可以找到所有从1到4选择2个数的所有可能组合:[[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]。循环的结束位置,这样就可以避免不必要的搜索,提高了算法的效率。

2023-10-18 13:10:52 30 1

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

你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。这段代码是一个修剪二叉搜索树的函数,使得树中所有节点的值都在给定的范围。这个函数假设给定的二叉树是一个有效的二叉搜索树。然后返回处理后的根节点。

2023-10-17 23:43:17 26

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

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。二叉搜索树是一种特殊的树,其中每个节点的左子节点的值都小于该节点的值,右子节点的值都大于该节点的值。

2023-10-17 23:07:07 23

原创 代码随想录训练营Day 20 || 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

方法中,我们首先检查根节点是否为空,或者根节点是否就是我们要找的其中一个节点。如果左子树和右子树的结果都不为空,那么说明我们要找的两个节点分别位于当前节点的左子树和右子树中,因此当前节点就是这两个节点的最低公共祖先。同样地,如果右子树的结果为空,但左子树的结果不为空,那么说明两个节点都位于当前节点的左子树中,因此我们返回左子树的结果作为最低公共祖先。如果左子树的结果为空,但右子树的结果不为空,那么说明两个节点都位于当前节点的右子树中,因此我们返回右子树的结果作为最低公共祖先。

2023-10-15 16:42:23 26 1

原创 代码随想录Day 19 || 654.最大二叉树、617.合并二叉树700.二叉搜索树中的搜索98.验证二叉搜索树

如果第一棵树的当前节点没有左子节点,但第二棵树的当前节点有左子节点,那么就将第二棵树的左子节点赋给第一棵树的当前节点。同样地,如果第一棵树的当前节点没有右子节点,但第二棵树的当前节点有右子节点,那么就将第二棵树的右子节点赋给第一棵树的当前节点。二叉搜索树是一种特殊的二叉树,它的每个节点都满足:节点的左子树中所有元素的值都小于该节点的值,节点的右子树中所有元素的值都大于该节点的值。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。

2023-10-15 13:39:42 23 1

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

否则,就把根节点的值添加到path列表中,并用根节点和sum减去根节点的值作为参数调用traversal方法。它首先判断当前节点是否为叶子节点(即没有左右子节点),如果是,则比较当前节点的深度和`max_depth`,如果当前节点的深度大于`max_depth`,则更新`max_depth`为当前节点的深度,并将`result`设置为当前节点的值。如果当前节点有左子节点,那么先将`depth`加一,然后递归调用`traversal`方法来遍历左子节点,并在方法返回后将`depth`减一,恢复原来的深度。

2023-10-12 14:29:16 16

原创 代码随想录算法训练营Day 15 104.二叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

这段代码通过递归的方式计算二叉树的最小深度。如果二叉树为空,返回0;否则,分别计算左子树和右子树的深度。在计算过程中,如果一个子树为空而另一个子树不为空,那么当前节点并不是最低点,需要继续向下遍历。最终返回根节点的最小深度作为整个二叉树的最小深度。这段代码是一个计算二叉树节点数量的函数。注意:在给定的代码中,我们假设二叉树的节点类型为。给出一个完全二叉树,求出该树的节点个数。属性分别表示左子树和右子树。

2023-10-09 15:24:34 22 1

原创 代码随想录算法训练营Day 17 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

它采用了递归的方式来计算左子树和右子树的高度,并比较它们的差值。这段代码的思路是通过递归计算二叉树的高度,并比较左右子树的高度差来判断是否平衡。然后判断当前节点是否为叶子节点,如果是,则将路径转换为字符串形式,并将其添加到结果列表中。在递归调用之后,需要进行回溯,将路径中的当前节点弹出,以便处理其他分支。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。这个方法是递归的,它会一直递归地处理树的左子树和右子树,直到找到左叶子节点并计算它们的总和。

2023-10-09 14:51:10 25 1

原创 代码随想录算法训练营Day 13 递归遍历 迭代遍历

前序遍历首先访问根节点,然后是左子树,最后是右子树,而后序遍历首先访问左子树,然后是右子树,最后是根节点。在这两种遍历中,节点的访问顺序自然地在栈的弹出顺序中体现,而不需要。节点主要在中序遍历中使用,以确保按照正确的顺序访问左子树、根节点和右子树。而在前序和后序遍历中,遍历顺序本身就能够自然地控制节点的访问顺序,不需要额外的指针。这意味着在访问完一个节点的左子树后,需要返回到该节点,然后再访问右子树。:前序遍历和后序遍历的顺序不同,它们不需要在左子树和右子树之间来回切换,因此不需要额外的。

2023-10-06 13:31:23 17

空空如也

空空如也

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

TA关注的人

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