![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
一刷代码随想录
文章平均质量分 70
代码随想录的60天一刷
好名字可以让你的朋友更容易记住你498
这个作者很懒,什么都没留下…
展开
-
代码随想录训练营Day 67|卡码网110.字符串接龙、105.有向图的完全可达性、106.岛屿的周长
思路:首先要知道 广搜只要搜到结果,这个结果的路径就是最短的。这道题正适合用广搜来解决。只要将一个元素添加进队列中,就对其进行访问标记。我们首先将对列的第一个元素取出,并将其路径加1。然后在这个字符串上进行改动,对每一位依次进行改动,可以将其遍历26个英文字母。如果改动后的字符串已经是结果字符串了,就将结果path+1进行输出;如果不是结果,就去看看这个改动后的字符串是否在字典里。如果在,就将其加入队列,并将其路径加1,进行访问标记。原创 2024-06-23 15:31:54 · 569 阅读 · 0 评论 -
代码随想录训练营Day 66|卡码网101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿
代码:(bfs广搜)思路:基础题型,这次直接在grid表上进行标记。先把靠近陆地的岛屿都标为0。将用于统计面积的变量的count置为0。接下来就可以排除临近陆地的岛屿,只统计孤岛的数量了。易错点:我又犯错了。先是忘记写命名空间了,然后又是在if判断里二维数组我只写了一个下标,最后是找边界找错了,我的循环变量i是在变的,我只要固定另一个下标为临界值就好了。不知道为什么我把i放到了边界的运算里(。。脑子糊了)代码:(dfs 深搜)这次的错误是 在进行下标是否非法的判断的时候,我又写错了。原创 2024-06-22 22:43:53 · 500 阅读 · 0 评论 -
代码随想录训练营Day 65|卡码网99岛屿数量 深搜、99.岛屿数量 广搜 、100.岛屿的最大面积
代码:(在符合递归条件时进行递归处理)代码:(在递归中用终止条件和处理逻辑)思路:这道题的思路就是用visited数组来进行标记我们访问过的岛屿,每发现一个没有被标记过的岛屿就进行对岛屿个数的统计,并对其进行访问后的标记。在代码1中,,因为在调用前就已经判断了,所以把visited的标记直接在调用前就进行处理了。在代码2中,。在深搜的开始就是判断是不是到了终止条件,如果没有,就可以进行visited的标记访问了。原创 2024-06-21 17:29:29 · 398 阅读 · 0 评论 -
代码随想录训练营Day 64|卡码网98. 所有可达路径(深搜)
易错点:因为邻接矩阵是序号从1开始的,所以在深搜的for循环里要注意边界条件取了等号。确定函数类型和参数,确定深搜的出口,确定深搜的处理过程(也就是for循环)这里的深搜的处理方式和之前的回溯法是类似的。原创 2024-06-20 21:41:41 · 233 阅读 · 0 评论 -
代码随想录训练营Day 63|力扣42. 接雨水、84.柱状图中最大的矩形
代码:(单调栈)思路:(这里是横着求矩形面积的)其实就是找每个元素前面第一个比它大的值(就是单调栈里的栈顶元素的下一个值),和后面第一个比它大的值(用单调栈,第一次比栈顶元素大的当前遍历的元素值)。注意:单调栈里存的都是下标。原创 2024-06-20 20:11:21 · 395 阅读 · 0 评论 -
代码随想录训练营Day 62|力扣739. 每日温度、496.下一个更大元素 I、503.下一个更大元素II
代码:(单调栈)思路:感觉这个单调栈的玩法有种消消乐的感觉(?保证单调栈里的元素都是单调递增的,如果遇到一个比栈顶元素大的数据,就去消消乐,消到只剩比它大的元素。易错点:消消乐的过程要用循环!!消完所有可以抵消的再将当前遍历元素入栈。原创 2024-06-20 18:00:04 · 313 阅读 · 0 评论 -
代码随想录训练营Day 60|力扣647. 回文子串、516.最长回文子序列
思路:dp数组的含义:dp数组中下标为i到j(包括ij)的连续子串是否是回文子串dp数组的递推公式:为了方面判断回文子串,并且用上我们之前的推导结果。去想一种可能——如果在一个回文子串两边添加相同的字符,那么新的子串也会是回文子串。因此如果 j - i <= 1的话,说明这个子串只涉及到i和j下标的元素,肯定是回文子串;否则,还要保证里面的子串也是回文子串,即dp[i + 1][j - 1] = true。dp数组的初始化:只能全部初始化为false。原创 2024-06-15 19:40:44 · 228 阅读 · 0 评论 -
代码随想录训练营Day 58|力扣392.判断子序列、115不同的子序列、583两个字符串的删除操作、72编辑距离
思路:这题就是判断两个字符串的最长公共子序列是不是s。其实套路都一样。下面的都是copy昨天的。dp数组的含义:dp[i][j]表示下标为0~i-1和0~j-1字符串的最长公共子序列的长度。注意到了吗,只是求这两个字符串的最长公共子序列,没有要求一定要以什么东西结尾。所以最后一个元素就是dp数组中最大的那个元素。dp数组的初始化:dp[0][j]和dp[i][0]都没有实际意义,而且为了能够推出符合实际意义的dp[1][1]应该把这些元素初始化为0。原创 2024-06-13 17:04:44 · 610 阅读 · 1 评论 -
代码随想录训练营Day 57|力扣1143.最长公共子序列、1035.不相交的线、53. 最大子数组和 动态规划
思路:这道题和昨天的求两个数组的最长重复子数组很像,这道题的区别在于它不像前一道题那样要求所求的公共元素是连续的。而且两个题的dp数组的定义也不一样,前一道题明确要求以i-1和j-1作为结尾的最长重复子数组,所以我们不能保证最后一个元素一定是dp数组中最大的(因为必须以i-1和j-1为结尾,会丢弃一些长度更长的结果。所以要用result保存)dp数组的含义:dp[i][j]表示下标为0~i-1和0~j-1字符串的最长公共子序列的长度。注意到了吗,只是求这两个字符串的最长公共子序列,原创 2024-06-12 15:04:48 · 436 阅读 · 0 评论 -
代码随想录训练营Day 56|力扣300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
dp[i]为以i为下标结尾的子序列(包括i)的最长递增子序列。有了这个定义,才能知道dp数组怎么写,如果是其它的定义应该还是挺难写的。原创 2024-06-11 16:03:43 · 579 阅读 · 1 评论 -
代码随想录训练营Day 53|力扣309.最佳买卖股票时机含冷冻期 、714.买卖股票的最佳时机含手续费、总结
dp[i][0] 第i天持有股票的最大利润;dp[i][1] 第i天保持卖出股票的最大利润;dp[i][2] 第i天当天卖出股票的最大利润;// 持有股票:前一天就持有了 或 前一天已经过了冷冻期,今天买入股票 或 前一天就是冷冻期,今天买入股票。这几道买卖股票的题都是把第0天买入股票的情况初始化为-prices[0]这几道买卖股票的题都是把第0天买入股票的情况初始化为-prices[0]// 不持有股票: 前一天不持有 或 前一天持有,当天卖出(含手续费)dp[i][0] 第i天持有股票的最大利润;原创 2024-06-08 15:16:20 · 811 阅读 · 1 评论 -
代码随想录训练营Day 52|力扣123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV
代码:dp[i]表示在第i天不同的状态所获得的最大利润。其中:dp[i][0]表示第一次持有股票的状态;dp[i][1]表示第一次不持有股票的状态dp[i][2]表示第二次持有股票的状态;dp[i][3]表示第二次不持有股票的状态dp[i][0]:可能前一天就是第一次持有状态了,第i天什么都没做,还是为dp[i-1][0];也可能是当天第一次买入股票,那就是0-prices[i]dp[i][1]:可能前一天就是第一次不持有状态了,第i天什么都没做,还是为dp[i-1][1];原创 2024-06-07 16:29:30 · 856 阅读 · 0 评论 -
代码随想录训练营Day 51|力扣121. 买卖股票的最佳时机、122.买卖股票的最佳时机II
思路:dp数组的含义:dp[i][0]表示当天持有股票的最大收入;dp[i][1]表示当天不持有股票的最大收入dp数组的递推: 持有股票:前一天就已经买入了股票 或 当天买入股票,即dp[i][0] = max(dp[i - 1][0],-prices[i]);不持有股票:前一天就卖出了股票 或 在持有股票的前提下,当天卖出股票,即 dp[i][1] = max(dp[i - 1][0] + prices[i],dp[i - 1][1]);原创 2024-06-06 10:10:49 · 366 阅读 · 0 评论 -
代码随想录训练营Day 50|力扣198.打家劫舍、213.打家劫舍II、337.打家劫舍III
思路:dp数组的定义:考虑第0~i个房间,所能偷得的最大利润是dp[i]dp数组的递推公式:有两种情况,一个是决定偷第i个房间,即dp[i - 2] + nums[i];一个是不偷第i个房间,即dp[i - 1]。dp数组的初始化:因为递推公式里出现了i-2,所以我们要把dp[0]和dp[1]都定义了。dp[0],只有一个房间,肯定要偷。dp[1]可以选择金额较大的房间号来偷dp数组的遍历顺序:后面的元素依赖前面元素的取值,正序遍历。注意:我背包问题写顺手了,最后直接数组访问越界了。原创 2024-06-05 10:59:19 · 413 阅读 · 1 评论 -
代码随想录训练营Day 49|力扣139.单词拆分、关于多重背包,你该了解这些!、背包问题总结篇!
思路:dp数组的含义:dp[j]表示字符串下标从0~j的字符串是否能被所给的单词组成dp数组的递推公式:当dp[i]已经为真,j - i这段长度也为一个单词时,说明dp[j]为真。即为dp数组的初始化:为了让后面的值都有效,dp[0] = truedp数组的遍历顺序:这道题不同的单词顺序不同会拼成不同的字符串,因此这是在求排列数。所以要先遍历背包,再遍历物品。细节:这道题“物品”的处理方式和之前的不一样。原创 2024-06-04 18:58:07 · 161 阅读 · 0 评论 -
代码随想录训练营Day 48|70. 爬楼梯 (进阶)、力扣322. 零钱兑换、279.完全平方数
思路:dp数组的含义:每次只能爬0~i阶,爬到第j阶楼梯的方法总数为dp[j]dp数组的递推公式:这其实相当于一个完全背包问题。因为我们可以把它等价为,每次都向背包里装0~i种物品,每件物品的重量和价值都为0~i,装满容量为j的背包有多少种方法。关于求方法的递推公式——。dp数组的初始化:dp[0]=1,如果为0,后续全部为0,没法算dp数组的遍历顺序:这道题是求排列数,所以要先遍历背包,再遍历物品。正序遍历。原创 2024-06-03 11:14:38 · 439 阅读 · 0 评论 -
代码随想录训练营Day 46|力扣完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ
代码:(动态规划)思路:01背包的滚动数组需要倒叙遍历,保证每个物品只被添加一次。而且,因为要求的dp值依赖于上一行的状态,只能先遍历物品,再遍历背包。完全背包的滚动数组需要正序遍历,保证每个物品可以被添加多次。而且,因为要求的dp值只依赖同一行的之前求出来的dp值,先遍历物品还是背包都可以。dp数组的含义:在物品可选种类为0~i的前提下,尽量装满容量为j的背包所获得的最大价值为dp[j]原创 2024-06-01 15:54:07 · 483 阅读 · 0 评论 -
代码随想录训练营Day 45|力扣1049. 最后一块石头的重量 II、494. 目标和、474.一和零
思路:这道题和划分等和子集的题的思路很像,我们尽量把石头按照重量等分成两组,然后碰撞,这样剩下的石头重量最低。这道题也是把石头的重量看成是它的价值。dp数组的含义:dp[j]表示 用物品1-i去装容量为j的背包所得的最大重量dp数组的递推公式:就是一维滚动01背包的基础上,把价值换成了重量。dp数组的初始化:为了为了确保每个物品只被添加一次,我们在遍历物品的循环中使用了倒序遍历。这是因为如果在正序遍历的情况下,当我们计算dp[j]时,已经被更新过了,如果当前物品被多次添加,则dp[j]原创 2024-05-31 19:01:25 · 523 阅读 · 0 评论 -
代码随想录训练营Day 44|01背包问题、滚动数组、力扣416. 分割等和子集
代码:思路:dp数组的含义:dp[i][j]表示考虑物品i后放空间为j的背包的最大价值dp数组的递推公式:考虑两种情况:一是背包装不下物品i,这样只有一种选择了——不装物品i dp[i][j] = dp[i-1][j];原创 2024-05-30 22:56:04 · 990 阅读 · 0 评论 -
代码随想录训练营Day 43|力扣343. 整数拆分、96.不同的二叉搜索树
思路:dp数组的含义:拆分数字i所获得的最大乘积为dp[i]dp数组的递推公式:分为两种情况,拆分为两个数字,拆分为两个以上的数字。因此,dp[i] =max(dp[i], max(j * (i - j),j * dp[i - j]))。是为了去记录 之前遍历j的不同数值时的可能取到的最大值——通过不断更新 dp[i] 的值,我们可以在动态规划的过程中找到拆分数字 i 所获得的最大乘积。也正是因为这种,我们才能够不断地比较并选择最优解,从而得到最终的结果。原创 2024-05-29 16:43:45 · 343 阅读 · 1 评论 -
代码随想录训练营Day 42|力扣62.不同路径、63. 不同路径 II
初始化:因为是由左方的方法数,和上方的方法数推出来的,因此,我们只需要初始化最上方的行,和最左边的列。初始化:因为是由左方的方法数,和上方的方法数推出来的,因此,我们只需要初始化最上方的行,和最左边的列。递推公式:因为只能向右或向下走,所以dp[i][j] = dp[i - 1][j] + dp[i][j - 1]递推公式:因为只能向右或向下走,所以dp[i][j] = dp[i - 1][j] + dp[i][j - 1]这道题,我还是出错了,虽然我递推公式写对了,但是我在初始化的时候,原创 2024-05-28 23:12:41 · 260 阅读 · 1 评论 -
代码随想录训练营Day 41|力扣509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
思路:dp数组的含义:dp[i] 表示斐波那契数列的第i位初始化:按照题意,dp[0]=0;dp[1]=1;递推公式: dp[i] = dp[i-1]+dp[i-2];遍历顺序:从左到右我在做这道题的时候,没有好好审题,直接把dp[0]也赋值为1了,而且在求第0个,第一个dp数值时,就应该直接返回n了。如果不这样力扣会报错,什么堆栈异常()原创 2024-05-27 13:25:55 · 410 阅读 · 0 评论 -
代码随想录训练营Day 39|力扣738.单调递增的数字、968.监控二叉树
代码:思路:这道题其实很好想,但是具体实现细节有很多需要注意的。我们把遇到的情况分为两类,一种是本来就满足题意的,我们不能对它做任何其他操作。另一类是,不满足题意的。例如,85,我们会找到对应的目标数字为79。因为如果当前位已经小于前一位了,那就只能找,前一位减一后,把当位及以后的位全变为9,这样就能够求得目标数了。为了不对满足题意的数字进行操作,我设置了一个变量flag,并把它初值设为strNum.size()。这样在进行修改9的时候,它就不会进入循环。原创 2024-05-25 10:58:10 · 297 阅读 · 0 评论 -
代码随想录训练营Day 38|力扣435. 无重叠区间、763.划分字母区间、56. 合并区间
代码:(贪心算法)思路:这道题和我昨天做的用最少的箭引爆气球的题很像。都是按照左边界排序,然后去判断当前区间的左边界有没有小于前一个结点的有边界,如果有,就说明这两个区间重叠。当然也可能后续的很多区间都重叠了,因此,这里把当前区间的右边界赋值为min(当前区间的右边界,前一个区间的右边界),然后继续循环就好了。上一题问的是最少数量的箭,因此我们是把它初始化为1.然后在区间不重叠的时候++。本题是求有多少给重叠区间,所以我们把它初始化为0,在区间重叠的时候++。(本题如果前后两个区间紧挨着——也就是。原创 2024-05-24 17:41:54 · 401 阅读 · 0 评论 -
代码随想录训练营Day 37|力扣860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球
代码:(贪心算法)思路:这道题贪在哪里?局部最优:尽可能地用面值大的钞票来找钱;全局最优:成功地实现给所有的顾客找钱这道题的难点是什么?其实这道题的逻辑并不复杂。难点可能是,自己只停留在了“想”的阶段,没有自己去试着用代码描述一遍过程。原创 2024-05-23 13:00:31 · 405 阅读 · 0 评论 -
代码随想录训练营Day 36|力扣1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果
代码:(贪心算法)思路:这道题怎么贪?先把数组里的负数,按照绝对值大小排序。遇到负数,就耗费k一次,把它变成正数。局部最优为:尽可能地加更多的正数;全局最优:总和最大那如果遍历了一次数组,k还没用完怎么办?局部最优:取绝对值最小的数来切换正负,消耗完所有的k;全局最优:使得正负的改变,对总和的影响最小。原创 2024-05-22 15:47:56 · 421 阅读 · 0 评论 -
代码随想录训练营Day 35|力扣122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II
代码:(贪心算法)思路:题意是,我们可以多次买入股票(在不同的天数),然后让我们求最大利润。这里的局部最优是:每次都收获正利润;全局最优是:找到最大的利润总和具体的做法就是:我们可以把 前一天买的股票在今天卖出去获得正利润 的所有利润相加那为什么可以这么做?你这样不是忽略了我可以隔着好几天再卖股票的情况了吗?举个例子:假设你第三天买入股票,第六天卖出。那你的总利润就是prices[6] - prices[3]。原创 2024-05-21 16:48:31 · 475 阅读 · 0 评论 -
代码随想录训练营Day 34|力扣455.分发饼干、376. 摆动序列、53. 最大子序和
思路:这里贪心的就是:用小饼干去满足更多的胃口小的朋友。。我这里又犯错了:我一开始没有考虑我在匹配胃口的时候,也让g数组不要越界。原创 2024-05-20 13:48:38 · 639 阅读 · 0 评论 -
代码随想录训练营Day 32|力扣332.重新安排行程、51. N皇后、37. 解数独
思路:hard题,我看看就行了可以将这个过程类比为在一个迷宫中寻找通往终点的路径。targets 可以看作是迷宫地图,记录了每个位置可以通往的下一个位置以及通往该位置的航班次数。backtracking 函数就像是一个人在迷宫中尝试不同的路径,每次都选择一个可行的航班前往下一个目的地,直到找到通往终点的路径或者走入死胡同。最终,findItinerary 函数就像是一个人在迷宫入口处开始寻找通往出口的路径。原创 2024-05-18 14:12:48 · 581 阅读 · 0 评论 -
代码随想录训练营Day 31|力扣491.递增子序列、46.全排列、47.全排列 II
代码:思路:本题和之前的题在细节上还是有很多不同的。1.本题不能排序,因为排序会破会数组的顺序性,而题上要求的是按顺序来的递增子序列2.本题要树层去重,但是因为不能排序,所以不能用used数组了,只能用unorded_set来查找。3.本题没有要求序列里的元素在数组里必须相邻,所以和切割回文子串里的要求不一样,以及在for循环里遇到不满足的不能用break,因为后面的元素也可能有满足题意的元素。4.本题由于没有把unordered_set当成参数进行地址传递,也没有设成成员变量。原创 2024-05-17 16:19:16 · 406 阅读 · 0 评论 -
代码随想录训练营Day 30|力扣93.复原IP地址、78.子集、90.子集II
思路:这道题和昨天的切割回文子串有细节上的区别。这里我们直接在题上给的参数s上进行修改,就不用path存放数组了。又因为,这道题是切割出合法的ip地址,所以我们只能切成4端,所以,我们用pointNum来记录逗点的数量,为3的时候,说明我们已经切割成4段了,可以进行最后的判断了。还要记得加了逗点后,startIndex的值也要+1了我在做这道题时,犯了很多错:区间是左闭右闭的,所以边界相等是合法的范围,同时遍历只遍历start到end下标内的元素就好了。原创 2024-05-16 15:19:01 · 306 阅读 · 0 评论 -
代码随想录训练营Day 29|力扣39. 组合总和、40.组合总和II、131.分割回文串
代码:(未剪枝版 )代码:(剪枝版)思路:学到了这种元素数量不限制的取的解法其实startIndex变量还是要有,因为我们求的是组合,要数层去重;并且这是在同一个数组里取数。而数量不限,体现在我在递归里传入的starIndex的值是i,而不是i+1了。之前说过for循环管控每一层数的宽度;递归则管控数的深度。这样更改后,就可以在取完一个数的情况后,继续取这个数。实现如下图所示的效果:关于剪枝的操作。这种涉及到总和大小的取值时。剪枝就要将给定的数组排序!原创 2024-05-15 18:15:01 · 606 阅读 · 0 评论 -
代码随想录训练营Day 28|力扣216.组合总和III、17.电话号码的字母组合
代码:(这里剪枝的思路和昨天发的一样)代码:(又加了进一步剪枝的操作。因为给的数都是正数,和只能越加越大,所以当目前的和已经大于目标和,就可以剪枝了)思路:组合问题的去重是通过startIndex每次加1来确定的,我们可以保证在接下来的同一层的子树用到的元素和之前的不一样。这道题的去重可以从两个角度来进行,一个是题上要求的个数,一个是题上要求的总和。个数已经不够题上要求的,整个子树都不满足要求;正数只会越加越大,现在的和就已经超过要求的,肯定不符合题意。原创 2024-05-14 12:51:48 · 428 阅读 · 0 评论 -
代码随想录训练营Day 27|理论基础、力扣 77. 组合
所以回溯法,都可以转换成一个n叉树的树形结构,集合的大小就是子树的宽度 ,递归的深度就是树的深度。原创 2024-05-13 22:02:01 · 176 阅读 · 0 评论 -
代码训练营训练营Day 25|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
题目链接/文章讲解:视频讲解:代码:(后序遍历)(和我昨天发的那个删除结点基本上代码一样。但是上一题只需要删一个就可以返回,这题需要删完全部。所以本题采用后序遍历,就可以保证整棵树的结点都被处理过了。思路:不知道为什么力扣不让delete。代码:前序遍历。原创 2024-05-11 20:02:03 · 301 阅读 · 0 评论 -
代码随想录训练营Day 24|力扣235. 二叉搜索树的最近公共祖先 、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
代码: (递归法)思路:我又悟了。二叉搜索树如果是需要遍历整个树的话,就用中序遍历来遍历;如果是要你找某个结点,你完全没有必要遍历,搜索树不就是来干这个的吗,就是要和当前结点的值比大小,来决定接下来的搜索方向。这道题其实就是要意识到,我们从根节点出发,向下搜索,最先找到结点的值的大小在两者之间的,就可以返回就行了。别忘了这是搜索树,遍历整棵搜索树简直是对搜索树的侮辱。代码:(迭代法)原创 2024-05-10 19:30:39 · 247 阅读 · 0 评论 -
代码随想录训练营Day 23|力扣530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
代码: (不太好)思路:这份代码虽然没问题,但其实没有很好地利用返回值。既然都是要遍历一遍所有结点的,不如直接用没有返回值的递归函数。代码:(改进,中序遍历,双指针)思路:在二叉树遍历里用双指针,就是要定义一个成员变量pre记录前一个结点,然后在递归函数的中间处理逻辑里,操作两个指针进行一些运算,最后让把现在遍历的结点的指针cur赋值给pre。代码:(迭代法)思路:这是一个使用了标记法的中序遍历(不懂的翻一下我以前二叉树统一迭代的博客文章),计算了相邻节点值的最小差值。使用了一个pre。原创 2024-05-09 16:44:15 · 321 阅读 · 0 评论 -
代码随想录训练营Day 22|力扣654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
代码:思路:这道题我用的和上条博客用中序数组和后序数组构造二叉树一样的思路。代码格式也差不多。当然直接构造新的子数组还是效率较低的(不过我感觉很易懂),改进就是每次分隔不用定义新的数组,而是通过下标索引直接在原数组上操作。代码:(改进版)原创 2024-05-09 13:57:33 · 439 阅读 · 0 评论 -
代码随想录训练营Day 21|力扣513.找树左下角的值、112. 路径总和 113.路径总和ii、106.从中序与后序遍历序列构造二叉树、105.从前序与中序遍历序列构造二叉树
代码: 层序遍历思路:这道题求得是最后一层最左边的结点,我们可以每次在第二次循环时,把第一次循环时的结点值记录下来(可以保证是最左边的),这样就可以返回了。因为这样下来,每次循环都会将上一次求得的result覆盖成最新一层的最左边的结点,最后留下的自然就是最后一层的最左边的结点。代码:递归法思路:在最大深度的时候,先遍历左子树的情况下,求得的结点值就是题目要求。因为这道题没有中的处理逻辑,以及我们的遍历顺序都是先遍历左节点,所以也可以是此代码满足任何遍历顺序。原创 2024-05-07 18:41:24 · 586 阅读 · 0 评论 -
代码随想录训练营Day 20|力扣110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和
思路:这种需要左右子树返回的信息来进行操作的,都得用后序遍历。对于已经判断完成(即子树不是平衡二叉树,那整棵树肯定也不是平衡二叉树)的情况,给它一路绿灯地返回(-1)上去.原创 2024-05-06 20:49:40 · 247 阅读 · 2 评论