算法训练营
文章平均质量分 83
菜鸟是大神
人有两次生命,一次是出生,一次是觉醒,希望我们可以在风华正茂时重获新生,而不是在垂暮之年幡然醒悟。
展开
-
【单调栈】代码随想录算法训练营第六十天 |84.柱状图中最大的矩形(待补充)
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。求在该柱状图中,能够勾勒出来的矩形的最大面积。原创 2024-03-14 21:04:32 · 274 阅读 · 2 评论 -
【单调栈】代码随想录算法训练营第五十九天 |503.下一个更大元素II, 42. 接雨水 (待补充)
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。原创 2024-03-14 21:00:07 · 365 阅读 · 0 评论 -
【单调栈】代码随想录算法训练营第五十八天 |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].原创 2024-03-14 20:53:09 · 359 阅读 · 0 评论 -
【动态规划】代码随想录算法训练营第五十七天 |647. 回文子串, 516.最长回文子序列,动态规划总结篇 (待补充)
如今动态规划已经讲解了42道经典题目,共50篇文章,是时候做一篇总结了。关于动态规划,在专题第一篇关于动态规划,你该了解这些!就说了动规五部曲,而且强调了五部对解动规题目至关重要!这是Carl做过一百多道动规题目总结出来的经验结晶啊,如果大家跟着「代码随想哦」刷过动规专题,一定会对这动规五部曲的作用感受极其深刻。确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组。原创 2024-03-14 20:45:49 · 278 阅读 · 0 评论 -
【动态规划】代码随想录算法训练营第五十五天 |583. 两个字符串的删除操作, 72. 编辑距离,编辑距离总结篇 (待补充)
本周我们讲了动态规划之终极绝杀:编辑距离,为什么叫做终极绝杀呢?细心的录友应该知道,我们在前三篇动态规划的文章就一直为 编辑距离 这道题目做铺垫。心思的录友应该会发现我用了三道题做铺垫,才最后引出了动态规划:72.编辑距离(opens new window),Carl的良苦用心呀,你们体会到了嘛!原创 2024-03-14 20:38:19 · 861 阅读 · 0 评论 -
【动态规划】代码随想录算法训练营第五十四天 |392.判断子序列, 115.不同的子序列 (待补充)
字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是)字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。现在,我们可以绘制一些连接两个数字 A[i] 和 B[j] 的直线,只要 A[i] == B[j],且我们绘制的直线不与任何其他连线(非水平线)相交。原创 2024-03-14 20:31:21 · 417 阅读 · 0 评论 -
【动态规划】代码随想录算法训练营第五十三天 |1143.最长公共子序列, 1035.不相交的线 ,53. 最大子序和 动态规划 (待补充)
例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。现在,我们可以绘制一些连接两个数字 A[i] 和 B[j] 的直线,只要 A[i] == B[j],且我们绘制的直线不与任何其他连线(非水平线)相交。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。原创 2024-03-14 20:25:28 · 341 阅读 · 0 评论 -
【动态规划】代码随想录算法训练营第五十二天 |300.最长递增子序列, 674. 最长连续递增序列 ,718. 最长重复子数组 (待补充)
连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l原创 2024-03-14 20:14:52 · 291 阅读 · 0 评论 -
【动态规划】代码随想录算法训练营第五十一天 | 309.最佳买卖股票时机含冷冻期, 714.买卖股票的最佳时机含手续费,总结(待补充)
之前我们已经把力扣上股票系列的题目都讲过的,但没有来一篇股票总结,来帮大家高屋建瓴,所以总结篇这就来了!动态规划:121.买卖股票的最佳时机(opens new window)动态规划:122.买卖股票的最佳时机II(opens new window)动态规划:123.买卖股票的最佳时机III(opens new window)动态规划:188.买卖股票的最佳时机IV(opens new window)动态规划:309.最佳买卖股票时机含冷冻期(opens new window)原创 2024-03-11 15:45:56 · 482 阅读 · 0 评论 -
【动态规划】代码随想录算法训练营第五十天 |123.买卖股票的最佳时机III,188.买卖股票的最佳时机IV(待补充)
给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。原创 2024-03-11 15:05:14 · 383 阅读 · 0 评论 -
【动态规划】代码随想录算法训练营第四十八天 |121. 买卖股票的最佳时机,122.买卖股票的最佳时机II(待补充)
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。返回你可以从这笔交易中获取的最大利润。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。原创 2024-03-11 14:54:53 · 339 阅读 · 0 评论 -
【动态规划】代码随想录算法训练营第四十七天 |198.打家劫舍,213.打家劫舍II ,337.打家劫舍III (待补充)
同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,能够偷窃到的最高金额。原创 2024-03-11 14:45:27 · 406 阅读 · 0 评论 -
【动态规划】代码随想录算法训练营第四十六天 |139.单词拆分,关于多重背包,你该了解这些! ,背包问题总结篇!(待补充)
多重背包在面试中基本不会出现,力扣上也没有对应的题目,大家对多重背包的掌握程度知道它是一种01背包,并能在01背包的基础上写出对应代码就可以了。至于背包九讲里面还有混合背包,二维费用背包,分组背包等等这些,大家感兴趣可以自己去学习学习,这里也不做介绍了,面试也不会考。这篇背包问题总结篇是对背包问题的高度概括,讲最关键的两部:递推公式和遍历顺序,结合力扣上的题目全都抽象出来了。而且每一个点,我都给出了对应的力扣题目。最后如果你想了解多重背包,可以看这篇动态规划:关于多重背包,你该了解这些!原创 2024-03-11 14:32:36 · 856 阅读 · 0 评论 -
【动态规划】代码随想录算法训练营第四十五天 |70. 爬楼梯 (进阶),322. 零钱兑换 ,279.完全平方数 (待补充)
完全平方数 是一个整数,其值等于另一个整数的平方;例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。当 m = 2,n = 3 时,n = 3 这表示一共有三个台阶,m = 2 代表你每次可以爬一个台阶或者两个台阶。给你一个整数 n ,返回和为 n 的完全平方数的 最少数量。输出描述:输出一个整数,表示爬到楼顶的方法数。注意:给定 n 是一个正整数。原创 2024-03-11 14:26:09 · 1072 阅读 · 0 评论 -
【动态规划】代码随想录算法训练营第四十四天 |完全背包,518. 零钱兑换 II , 377. 组合总和 Ⅳ (待补充)
细心的同学可能发现,全文我说的都是对于纯完全背包问题,其for循环的先后循环是可以颠倒的!但如果题目稍稍有点变化,就会体现在遍历顺序上。如果问装满背包有几种方式的话?那么两个for循环的先后顺序就有很大区别了,而leetcode上的题目都是这种稍有变化的类型。这个区别,我将在后面讲解具体leetcode题目中给大家介绍,因为这块如果不结合具题目,单纯的介绍原理估计很多同学会越看越懵!别急,下一篇就是了!最后,原创 2024-03-10 21:36:08 · 628 阅读 · 0 评论 -
【动态规划】代码随想录算法训练营第四十三天 |1049. 最后一块石头的重量 II,494. 目标和,474.一和零 (待补充)
- 力扣(LeetCode)代码随想录3、题目:有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x原创 2024-03-10 21:27:17 · 657 阅读 · 0 评论 -
【动态规划】代码随想录算法训练营第四十一天 |01.背包理论基础,01.背包问题,你该了解这些!滚动数组,416.分割等和子集(待补充)
讲了这么多才刚刚把二维dp的01背包讲完,这里大家其实可以发现最简单的是推导公式了,推导公式估计看一遍就记下来了,但难就难在如何初始化和遍历顺序上。可能有的同学并没有注意到初始化 和 遍历顺序的重要性,我们后面做力扣上背包面试题目的时候,大家就会感受出来了。下一篇 还是理论基础,我们再来讲一维dp数组实现的01背包(滚动数组),分析一下和二维有什么区别,在初始化和遍历顺序上又有什么差异,敬请期待!以上的讲解可以开发一道面试题目(毕竟力扣上没原题)。原创 2024-03-10 21:13:06 · 849 阅读 · 0 评论 -
【动态规划】代码随想录算法训练营第三十九天 |62.不同路径,63.不同路径II(待补充)
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。机器人试图达到网格的右下角(在下图中标记为“Finish”)。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。那么从左上角到右下角将会有多少条不同的路径?解释: 从左上角开始,总共有 3 条路径可以到达右下角。网格中的障碍物和空位置分别用 1 和 0 来表示。原创 2024-03-10 20:58:02 · 412 阅读 · 0 评论 -
【动态规划】代码随想录算法训练营第四十天 |343.整数拆分,96.不同的二叉搜索树(待补充)
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。返回你可以获得的最大乘积。给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?原创 2024-02-28 17:59:06 · 213 阅读 · 0 评论 -
【动态规划】代码随想录算法训练营第三十八天 |基础知识,509.斐波那契数,70.爬楼梯,746.使用最小花费爬楼梯(待补充)
动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的,在关于贪心算法,你该了解这些!中我举了一个背包问题的例子。例如:有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。原创 2024-02-22 18:07:55 · 1107 阅读 · 0 评论 -
【贪心算法】代码随想录算法训练营第三十七天 |738.单调递增的数字,968.监控二叉树,总结(待补充)
本题只要想清楚个例,例如98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]减一,strNum[i]赋值9,这样这个整数就是89。就可以很自然想到对应的贪心解法了。想到了贪心,还要考虑遍历顺序,只有从后向前遍历才能重复利用上次比较的结果。最后代码实现的时候,也需要一些技巧,例如用一个flag来标记从哪里开始赋值9。1、将整数转换为字符串。2、将字符串转换为字符数组。3、从字符串的倒数第二个字符开始,遍历字符数组。原创 2024-02-20 21:10:33 · 736 阅读 · 0 评论 -
【贪心算法】代码随想录算法训练营第三十六天 |435.无重叠区间,763.划分字母区间,56.合并区间(待补充)
这道题目leetcode标记为贪心算法,说实话,我没有感受到贪心,找不出局部最优推出全局最优的过程。就是用最远出现距离模拟了圈字符的行为。但这道题目的思路是很巧妙的,所以有必要介绍给大家做一做,感受一下。/**1、该函数的功能是将给定字符串分割成尽可能多的连续子串,使得每个子串的字符都不相同,并返回每个子串的长度列表。2、创建一个空的整数列表list,用于存储每个子串的长度。3、创建一个长度为26的整数数组edge,用于存储每个字符最后一次出现的索引。4、将输入字符串s转换为字符数组chars。原创 2024-02-20 08:54:40 · 974 阅读 · 0 评论 -
【贪心算法】代码随想录算法训练营第三十四天 |860.柠檬水找零,406.根据身高重建队列,452.用最少数量的箭引爆气球(待补充)
咋眼一看好像很复杂,分析清楚之后,会发现逻辑其实非常固定。这道题目可以告诉大家,遇到感觉没有思路的题目,可以静下心来把能遇到的情况分析一下,只要分析到具体情况了,一下子就豁然开朗了。如果一直陷入想从整体上寻找找零方案,就会把自己陷进去,各种情况一交叉,只会越想越复杂了。// 如果当前面值为5元,直接加1five++;// 如果当前面值为10元,则需要判断是否有5元,有则减1five--;ten++;// 如果当前面值为20元,则需要判断是否有10元和5元,有10元则减1,没有则减3张5元。原创 2024-02-19 21:35:38 · 1118 阅读 · 0 评论 -
【贪心算法】代码随想录算法训练营第三十三天 |1005.K次取反后最大化的数组和,134.加油站,135.分发糖果(待补充)
贪心的题目如果简单起来,会让人简单到开始怀疑:本来不就应该这么做么?这也算是算法?我认为这不是贪心?本题其实很简单,不会贪心算法的同学都可以做出来,但是我还是全程用贪心的思路来讲解。因为贪心的思考方式一定要有!如果没有贪心的思考方式(局部最优,全局最优),很容易陷入贪心简单题凭感觉做,贪心难题直接不会做,其实这样就锻炼不了贪心的思考方式了。所以明知道是贪心简单题,也要靠贪心的思考方式来解题,这样对培养解题感觉很有帮助。// 将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小.boxed()原创 2024-02-19 12:56:47 · 690 阅读 · 0 评论 -
【贪心算法】代码随想录算法训练营第三十二天 |122.买卖股票的最佳时机II,55.跳跃游戏,45.跳跃游戏II(待补充)
相信大家可以发现,这道题目相当于55.跳跃游戏(opens new window)难了不止一点。但代码又十分简单,贪心就是这么巧妙。以最小的步数增加最大的覆盖范围,直到覆盖范围覆盖了终点,这个范围内最少步数一定可以跳到,不用管具体是怎么跳的,不纠结于一步究竟跳一个单位还是两个单位。// 当前覆盖的最远距离下标// 下一步能覆盖的最远距离下标i++) {// 可达位置的改变次数就是跳跃次数steps++;原创 2024-02-15 20:02:31 · 824 阅读 · 0 评论 -
代码随想录算法训练营第三十一天 |基础知识,455.分发饼干,376.摆动序列,53.最大子序和(已补充)
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。这么说有点抽象,来举一个例子:例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。再举一个例子如果是 有一堆盒子,你有一个背包体积为n,如何把背包尽可能装满,如果还每次选最大的盒子,就不行了。这时候就需要动态规划。动态规划的问题在下一个系列会详细讲解。本篇给出了什么是贪心以及大家关心的贪心算法固定套路。原创 2024-02-14 17:35:24 · 1400 阅读 · 0 评论 -
代码随想录算法训练营第三十天天 |332.重新安排行程,51.N皇后,37.解数独(待补充)
1、题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台2、文章讲解:代码随想录3、题目:给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。提示:示例 1:示例 2:51.N皇后1、题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台2、文章讲解:代码随想录3、题目:n 皇后问题 研究的是如原创 2024-02-12 15:25:21 · 801 阅读 · 0 评论 -
代码随想录算法训练营第二十九天 |491.递增子序列,46.全排列,47.全排列II(待补充)
可以看出元素1在[1,2]中已经使用过了,但是在[2,1]中还要在使用一次1,所以处理排列问题就不用使用startIndex了。本题给出的示例,还是一个有序数组 [4, 6, 7, 7],这更容易误导大家按照排序的思路去做了。给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。而本题求自增子序列,是不能对原数组进行排序的,排完序的数组都是自增子序列了。给定一个 没有重复 数字的序列,返回其所有可能的全排列。这又是子集,又是去重,是不是不由自主的想起了刚刚讲过的。原创 2024-02-11 22:06:29 · 925 阅读 · 0 评论 -
代码随想录算法训练营第二十八天 |93.复原IP地址,78.子集,90.子集II(已补充)
例如:"0.1.2.201" 和 "192.168.1.1" 是 有效的 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效的 IP 地址。示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。说明:解集不能包含重复的子集。原创 2024-02-11 17:50:09 · 418 阅读 · 0 评论 -
代码随想录算法训练营第二十七天 |39.组合总和,40.组合总和II,131.分割回文串(已补充)
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。示例: 输入: "aab" 输出: [ ["aa","b"], ["a","a","b"] ]说明: 所有数字(包括目标数)都是正整数。candidates 中的每个数字在每个组合中。candidates 中的数字可以。原创 2024-02-09 19:54:14 · 576 阅读 · 0 评论 -
代码随想录算法训练营第二十五天 |216.组合总和III,17.电话号码的字母组合(已补充)
开篇就介绍了本题与77.组合(opens new window)的区别,相对来说加了元素总和的限制,如果做完77.组合(opens new window)再做本题在合适不过。分析完区别,依然把问题抽象为树形结构,按照回溯三部曲进行讲解,最后给出剪枝的优化。相信做完本题,大家对组合问题应该有初步了解了。return res;// 剪枝操作return;return;// 剪枝9 - (k - path.size()) + 1i++) {sum += i;// 回溯// 回溯。原创 2024-02-08 21:34:34 · 855 阅读 · 0 评论 -
代码随想录算法训练营第二十四天 |回溯算法基础知识,77.组合(已补充)
溯法也可以叫做回溯搜索法,它是一种搜索的方式。在二叉树系列中,我们已经不止一次,提到了回溯,例如二叉树:以为使用了递归,其实还隐藏着回溯(opens new window)。回溯是递归的副产品,只要有递归就会有回溯。所以以下讲解中,回溯函数也就是递归函数,指的都是一个函数。本篇我们讲解了,什么是回溯算法,知道了回溯和递归是相辅相成的。接着提到了回溯法的效率,回溯法其实就是暴力查找,并不是什么高效的算法。然后列出了回溯法可以解决几类问题,可以看出每一类问题都不简单。原创 2024-02-08 12:01:45 · 680 阅读 · 0 评论 -
代码随想录算法训练营第二十三天 |669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树(待补充)
1、题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台2、文章讲解:代码随想录3、题目:给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。4、视频链接:你修剪的方式不对,我来给你纠正一下!| LeetCode:669. 修剪二叉搜索树_哔哩哔哩_bilibili5、思路:108.将有序数组转换为二叉搜索树1、题目链接:力扣(原创 2024-02-01 22:12:13 · 323 阅读 · 0 评论 -
代码随想录算法训练营第二十二天 |235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点(待补充)
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]原创 2024-01-31 13:43:57 · 380 阅读 · 0 评论 -
代码随想录算法训练营第二十一天 |530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数,236.二叉树的最近公共祖先(待补充)
示例 2: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 输出: 5 解释: 节点 5 和节点 4 的最近公共祖先是节点 5。示例 1: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 输出: 3 解释: 节点 5 和节点 1 的最近公共祖先是节点 3。例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]提示:树中至少有 2 个节点。原创 2024-01-30 23:04:04 · 439 阅读 · 0 评论 -
代码随想录算法训练营第二十天 |654.最大二叉树,617.合并二叉树,700.二叉搜索树种的搜索,98.验证二叉搜索树(待补充)
合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。给定二叉搜索树(BST)的根节点和一个值。你需要在BST中找到节点值等于给定值的节点。返回以该节点为根的子树。给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。通过给定的数组构建最大二叉树,并且输出这个树的根节点。给定一个二叉树,判断其是否是一个有效的二叉搜索树。原创 2024-01-30 22:49:20 · 429 阅读 · 0 评论 -
代码随想录算法训练营第十八天 |513.找树左下角的值,112. 路径总和 113.路径总和ii,106.从中序与后序遍历序列构造二叉树 ,105.从前序与中序遍历序列构造二叉树(待补充)
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。示例: 给定如下二叉树,以及目标和 sum = 22,给定一个二叉树,在树的最后一行找到最左边的值。根据一棵树的中序遍历与后序遍历构造二叉树。说明: 叶子节点是指没有子节点的节点。注意: 你可以假设树中没有重复的元素。原创 2024-01-30 19:38:11 · 504 阅读 · 0 评论 -
代码随想录算法训练营第十七天 |110.平衡二叉树,257.二叉树的所有路径,404.左叶子之和(待补充)
本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。给定二叉树 [1,2,2,3,3,null,null,4,4]给定二叉树 [3,9,20,null,null,15,7]给定一个二叉树,返回所有从根节点到叶子节点的路径。给定一个二叉树,判断它是否是高度平衡的二叉树。说明: 叶子节点是指没有子节点的节点。计算给定二叉树的所有左叶子之和。返回 false。原创 2024-01-27 18:04:01 · 47 阅读 · 0 评论 -
代码随想录算法训练营第十六天 |104.二叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数(待补充)
我来举一个典型的例子如题:完全二叉树只有两种情况,情况一:就是满二叉树,情况二:最后一层叶子节点没有满。对于情况一,可以直接用 2^树深度 - 1 来计算,注意这里根节点深度为1。对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树,然后依然可以按照情况1来计算。完全二叉树(一)如图:完全二叉树(二)如图:可以看出如果整个树不是满二叉树,就递归其左右孩子,直到遇到满二叉树为止,用公式计算这个子树(满二叉树)的节点数量。原创 2024-01-27 16:34:59 · 564 阅读 · 0 评论 -
代码随想录算法训练营第十五天 |层序遍历(10道),226.翻转二叉树,101.对称二叉树(待补充)
针对二叉树的问题,解题之前一定要想清楚究竟是前中后序遍历,还是层序遍历。二叉树解题的大忌就是自己稀里糊涂的过了(因为这道题相对简单),但是也不知道自己是怎么遍历的。这也是造成了二叉树的题目“一看就会,一写就废”的原因。针对翻转二叉树,我给出了一种递归,三种迭代(两种模拟深度优先遍历,一种层序遍历)的写法,都是之前我们讲过的写法,融汇贯通一下而已。这次我们又深度剖析了一道二叉树的“简单题”,大家会发现,真正的把题目搞清楚其实并不简单,leetcode上accept了和真正掌握了还是有距离的。原创 2024-01-25 22:28:43 · 1000 阅读 · 0 评论