- 博客(53)
- 收藏
- 关注
原创 代码随想录一刷总结
认识代码随想录是在大学期间学习算法课的过程看b站了解到的,也买了代码随想录的书当时玩心太大,就没有完全跟刷代码随想录,这次经历了二战,在考完研之后觉得自己好像又没机会考上我喜欢的学校了,结果也不出所料,今年目标学校还涨了几十分,没考上,所以当时下定决心找工作,就报名了这次训练营,经过六十天的刷题这次完成了刷题,但是最后十天因为要到处跑面试学习面试技巧背八股文什么的,导致自己直接看了答案看懂了就算ac了,接下来找到工作之后要重新回顾再刷一遍!
2024-03-20 17:00:11 319
原创 代码随想录算法训练营第六十天|84. 柱状图中最大的矩形
我们可以遍历每根柱子,以当前柱子 i 的高度作为矩形的高,那么矩形的宽度边界即为向左找到第一个高度小于当前柱体 i 的柱体,向右找到第一个高度小于当前柱体 i 的柱体。给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。对于每个柱子我们都如上计算一遍以当前柱子作为高的矩形面积,最终比较出最大的矩形面积即可。求在该柱状图中,能够勾勒出来的矩形的最大面积。
2024-03-14 09:48:27 443
原创 代码随想录算法训练营第五十九天|503. 下一个更大元素 II、42. 接雨水
给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素。数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。这道题和739. 每日温度几乎如出一辙。不过,本题是循环数组了。因此我们可以采用%运算,遍历两边数组即可。
2024-03-13 12:21:59 465
原创 代码随想录算法训练营第五十八天|739. 每日温度、496. 下一个更大元素 I。
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。本题是单调栈的扫盲题,难度不大,很标准的单调栈题。单调栈通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。时间复杂度为O(n)。使用单调栈主要有三个判断条件。
2024-03-13 12:08:22 431
原创 代码随想录算法训练营第五十七天|647. 回文子串、516. 最长回文子序列.
给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。1、确定dp数组(dp table)以及下标的含义我们在判断字符串S是否是回文,那么如果我们知道 s[1],s[2],s[3] 这个子串是回文的,那么只需要比较 s[0]和s[4]这两个元素是否相同,如果相同的话,这个字符串s 就是回文串。
2024-03-11 12:36:44 845
原创 代码随想录算法训练营第五十五天|583. 两个字符串的删除操作、72. 编辑距离。
给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。每步 可以删除任意一个字符串中的一个字符。1、确定dp数组(dp table)以及下标的含义dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。这里dp数组的定义有点点绕,大家要撸清思路。2、确定递推公式当word1[i - 1] 与 word2[j - 1]相同的时候。
2024-03-09 00:11:07 1073
原创 代码随想录算法训练营第五十四天|392. 判断子序列、115. 不同的子序列。
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。1、确定dp数组(dp table)以及下标的含义dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]。注意这里是判断s是否为t的子序列。即t的长度是大于等于s的。2、确定递推公式。
2024-03-08 23:29:07 729
原创 代码随想录算法训练营第五十三天|1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和。
给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。
2024-03-07 09:05:51 960
原创 代码随想录算法训练营第五十二天|300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组。
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。本题最关键的是要想到dp[i]由哪些状态可以推出来,并取最大值,那么很自然就能想到递推公式:i位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 + 1 的最大值。也就是dp[i] = max(dp[i], dp[j] + 1);
2024-03-07 08:51:27 319
原创 代码随想录算法训练营第五十一天|309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费。
给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。具体可以区分出如下四个状态:状态一:持有股票状态(今天买入股票,或者是之前就买入了股票然后没有操作,一直持有)不持有股票状态,这里就有两种卖出股票状态。
2024-03-06 22:34:00 798
原创 代码随想录算法训练营第五十天|123. 买卖股票的最佳时机 III、188. 买卖股票的最佳时机 IV。
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。确定dp数组以及下标的含义一天一共就有五个状态,没有操作 (其实我们也可以不设置这个状态)第一次持有股票第一次不持有股票第二次持有股票第二次不持有股票dp[i][j]中 i表示第i天,j为 [0 - 4] 五个状态,dp[i][j]表示第i天状态j所剩最大现金。
2024-03-04 18:33:43 897
原创 代码随想录算法训练营第四十八天|121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II。
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0。本题可以使用数组,dp[0]代表持有时的利润,dp[1]代表卖出的利润递推公式。
2024-03-03 09:58:34 321
原创 代码随想录算法训练营第四十七天|198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III。
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。1、确定dp数组(dp table)以及下标的含义dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i]。2、确定递推公式决定dp[i]的因素就是第i房间偷还是不偷。
2024-03-01 15:26:24 886
原创 代码随想录算法训练营第四十六天|139. 单词拆分。
从递推公式中可以看出,dp[i] 的状态依靠 dp[j]是否为true,那么dp[0]就是递推的根基,dp[0]一定要为true,否则递推下去后面都都是false了。“apple” + “apple” + “pen” 或者 “pen” + “apple” + “apple” 是不可以的,那么我们就是强调物品之间顺序。如果确定dp[j] 是true,且 [j, i] 这个区间的子串出现在字典里,那么dp[i]一定是true。题目中说是拆分为一个或多个在字典中出现的单词,所以这是完全背包。
2024-02-29 08:47:25 429
原创 代码随想录算法训练营第四十五天|70. 爬楼梯(进阶版)、322. 零钱兑换、279. 完全平方数。
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬至多m (1 <= m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。本题其实是一个完全背包问题。1阶,2阶,… m阶就是物品,楼顶就是背包。每一阶可以重复使用,例如跳了1阶,还可以继续跳1阶。问跳到楼顶有几种方法其实就是问装满背包有几种方法因此可以按照完全背包的格式写,不过本题是排列问题因为先1后2和先2后1不一样,所以要先遍历背包再遍历物品。
2024-02-28 09:36:55 900
原创 代码随想录算法训练营第四十四天|518. 零钱兑换 II、377. 组合总和 Ⅳ
给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0。假设每一种面额的硬币有无限个。题目数据保证结果符合 32 位带符号整数。本题和目标和得题目思路类似,主要是遍历顺序得差异。本题是设计出能凑出背包容量的组合数目,因此遍历物品的时候应该得出的是组合数目而不是背包数目,所以应该先遍历物品再遍历背包容量,这样就不会导致物品重复,形成排列结果。
2024-02-27 09:35:57 375
原创 代码随想录算法训练营第四十三天|1049. 最后一块石头的重量 II、494. 目标和、74. 一和零。
有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量。如果没有石头剩下,就返回 0。
2024-02-26 12:10:46 872
原创 代码随想录算法训练营第四十一天|416. 分割等和子集。
01背包的递推公式为:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);所以递推公式:dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);套到本题,dp[j]表示 背包总容量(所能装的总重量)是j,放进物品后,背的最大重量为dp[j]。本题,相当于背包里放入数值,那么物品i的重量是nums[i],其价值也是nums[i]。01背包中,dp[j] 表示: 容量为j的背包,所背的物品价值最大可以为dp[j]。
2024-02-24 09:15:54 455
原创 代码随想录算法训练营第四十天|343. 整数拆分、96. 不同的二叉搜索树。
给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积。1、确定dp数组(dp table)以及下标的含义设置dp[i] 为i的拆分最大值2、确定递推公式前一部分为将i分为i-j和j两部分,后一部分是将i分为j和更多的分块的i-j。3、dp数组如何初始化按照定义可以知道只有dp[2]有意义为14、确定遍历顺序。
2024-02-23 11:10:50 1108
原创 代码随想录算法训练营第三十九天|62. 不同路径、63. 不同路径 II。
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?本题按照动态规划五部曲也是非常简单的。1、确定dp数组(dp table)以及下标的含义dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。2、确定递推公式。
2024-02-23 09:31:28 1023
原创 代码随想录算法训练营第三十八天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯。
斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(n) = F(n - 1) + F(n - 2),其中 n > 1给定 n ,请计算 F(n)。本题主要是学会动态规划五部曲1、确定dp数组以及下标的含义dp[i]的定义为:第i个数的斐波那契数值是dp[i]2、确定递推公式状态转移方程 dp[i] = dp[i - 1] + dp[i - 2];3、dp数组如何初始化。
2024-02-22 21:47:08 796
原创 代码随想录算法训练营第三十七天|738. 单调递增的数字。
本题只要想到一个关键点,就是当前两个相邻的数字之间前一个比后一个大那么就让前一个减一而后一个变为9即可,例如举个例子98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]–,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。而从前往后遍历还是从后往前遍历呢,通过简单的模拟332的过程即可明白,通过从后往前的遍历才能实现利用好后面的元素变化。
2024-02-21 15:17:20 387
原创 代码随想录算法训练营第三十六天|435. 无重叠区间、763. 划分字母区间、56. 合并区间。
给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi]。返回 需要移除区间的最小数量,使剩余区间互不重叠。本题和上一个射气球类似,找到重叠区间即可,将数组按左边界排序,比较当前i的左边界和上一个i的右边界,若判断重合则将两者最小有边界赋予当前i的右边界,以便确定当前重叠区域的有边界,若不重合则计数,记录不重叠区域,最后返回总区域数量减去不重叠区域数量即可。
2024-02-19 12:13:30 365
原创 代码随想录算法训练营第三十四天|860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球。
在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零,返回 true ,否则返回 false。
2024-02-17 20:36:03 345
原创 代码随想录算法训练营第三十三天|1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果。
给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:选择某个下标 i 并将 nums[i] 替换为 -nums[i]。重复这个过程恰好 k 次。可以多次选择同一个下标 i。以这种方式修改数组后,返回数组 可能的最大和。
2024-02-16 10:38:43 328
原创 代码随想录算法训练营第三十二天|122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II。
给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。返回 你能获得的 最大 利润。假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0]。相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。
2024-02-15 21:50:13 352
原创 代码随想录算法训练营第三十一天|455. 分发饼干、376. 摆动序列、53. 最大子数组和。
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j]。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。本题就是很典型的贪心算法,只需要每次满足最大胃口的孩子就行,考虑局部最优结果。
2024-02-14 01:17:14 380
原创 代码随想录算法训练营第三十天|332. 重新安排行程、51. N 皇后、37. 解数独。
给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。例如,行程 [“JFK”, “LGA”] 与 [“JFK”, “LGB”] 相比就更小,排序更靠前。假定所有机票至少存在一种合理的行程。且所有的机票 必须都用一次 且 只能用一次。
2024-02-08 11:57:18 307
原创 代码随想录算法训练营第二十九天|491. 非递减子序列、46. 全排列、47. 全排列 II。
给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素。你可以按 任意顺序 返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。本题和子集乍一看差不多,但是还是有区别,本题要求得是自增排序,所以不能对原数组进行排序,所以不能用之前的去重逻辑,因此需要使用一个used数组来标记是否在本层使用过,因为当然使用map也是可以的,但是因为nums的数值大小确定,所以使用数组效率更高。
2024-02-07 17:40:01 448
原创 代码随想录算法训练营第二十八天|93. 复原 IP 地址,78. 子集,90. 子集 II。
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。
2024-02-06 17:31:33 385
原创 代码随想录算法训练营第二十七天|39. 组合总和、40. 组合总和 II、131. 分割回文串。
给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于 150 个。
2024-02-05 18:59:34 323
原创 代码随想录算法训练营第二十五天|216. 组合总和 III、17. 电话号码的字母组合。
找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:只使用数字1到9每个数字 最多使用一次返回 所有可能的有效组合的列表。该列表不能包含相同的组合两次,组合可以以任何顺序返回。本题和组合问题十分相似,按照剪支三部曲可以很好地解决。
2024-02-03 16:16:04 356
原创 代码随想录算法训练营第二十四天| 77. 组合。
本题是经典的回溯法解决的组合问题,回溯问题搞清楚纵向递归横向遍历即可,从题目可以看出横向是选取一个数,纵向是递归选取下一个数,如。给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。此题的剪支可以从剩下的数字不足凑够k个数来进行剪支。你可以按 任何顺序 返回答案。即可简单的写出此题的回溯算法。因此按照卡哥的回溯模板。
2024-02-02 16:22:18 398
原创 代码随想录算法训练营第二十三天|669. 修剪二叉搜索树、108. 将有序数组转换为二叉搜索树、538. 把二叉搜索树转换为累加树。
给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。可以证明,存在 唯一的答案。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。
2024-02-01 17:12:54 391 1
原创 代码随想录算法训练营第二十二天|235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点。
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。
2024-01-31 16:47:18 333
原创 代码随想录算法训练营第二十一天|530. 二叉搜索树的最小绝对差、501. 二叉搜索树中的众数、236. 二叉树的最近公共祖先。
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值。差值是一个正数,其数值等于两值之差的绝对值。遇到二叉搜索树就可以利用中序遍历,把二叉搜索树看成一个递增的数组,然后对数组进行处理。这样一想操作就简单了。而此题是求最小值,因为是递增数据,所以最小值就是相邻两个节点间的差值,只需要在遍历过程中记录前一个节点,然后更新pre节点和当前节点差值的最小值即可。递归法迭代法。
2024-01-30 17:25:14 377 1
原创 代码随想录算法训练营第二十天|654. 最大二叉树、617.合并二叉树、700. 二叉搜索树中的搜索、98. 验证二叉搜索树。
给定一个不重复的整数数组 nums。最大二叉树 可以用下面的算法从 nums 递归地构建:创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。返回 nums 构建的 最大二叉树。本题解题思路确定递归三部曲即可很好的解题第一步:确定递归函数的参数和返回值传入参数:传入需要构建的数组返回值:返回根节点第二步:确定终止条件终止条件:递归到单个节点,也就是叶子节点时返回。
2024-01-29 18:05:59 826
原创 代码随想录算法训练营第十八天|513. 找树左下角的值、112. 路径总和、113. 路径总和 II、106. 从中序与后序遍历序列构造二叉树、105. 从前序与中序遍历序列构造二叉树。
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。本体迭代法就是使用层序遍历法,记录每一层的第一个元素,遍历到最后一层更新的结果就是答案。而递归法,我们采用前中后序都可以,因为只要我们先遍历左子树就可。利用深度遍历找到深度最大的最先遍历的元素就可,因此我们可以设置两个全局变量,最大深度和最终结果,每当遍历的深度大于最大深度就更新这两个变量值,而由于我们是左子树优先遍历,所以我们的最终结果会先记录最左的节点。迭代法递归法。
2024-01-27 18:49:02 758
原创 代码随想录算法训练营第十七天|110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和。
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。此题使用递归法关键在于理解当子树不是平衡二叉树时整个二叉树就不是平衡二叉树,因为判定条件为两个子树不是平衡二叉树和左右子树高度超过1.终止条件为:递归到空节点,返回0。递归法。
2024-01-26 17:18:36 396 1
原创 代码随想录算法训练营第十六天|104. 二叉树的最大深度、111. 二叉树的最小深度、222. 完全二叉树的节点个数。
给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。后序遍历前序遍历。
2024-01-25 17:15:37 391
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人