自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营总结篇|60天一天不落的A完啦,喜大普奔

从一开始易于理解的双指针到数据结构的链表、哈希表、栈与队列和二叉树,还有结构及其鲜明的二叉搜索树,让我体会到了数据结构的精巧结构。从基于暴力思想的回溯到充满小聪明的贪心和充满算计的动态规划,让我体会到了各种算法思想的巧妙。这两个月应该是这十几年最充实最有目标的两个月,做课程项目、写大创计划申报书(顺利中标省级保底)、忙着复习应对期末考试和六级....好像每天都很忙但是每天依然坚持A题,中间甚至少了十多天的博客,最后也还是一一补上了,也刚好当复习了。

2023-06-19 08:06:20 471

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

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。思路:通过维护一个递增的单调栈来找到一个最大的面积。求在该柱状图中,能够勾勒出来的矩形的最大面积。csp第一次考试的第三题。

2023-06-17 10:13:34 112

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

题目描述:给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。题目描述:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。思路:数组扩大一倍,这样就可在最大节省空间和算力的效果下实现循环遍历。

2023-06-16 19:51:04 116

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

题目描述:请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。思路:感觉比上一题麻烦多了,要用一个map记录nums1的数的下标,然后遍历nums2。请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。思路:单调栈记录下标。

2023-06-16 19:49:40 95

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

给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000。示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "bbbb"。示例 2: 输入:"cbbd" 输出: 2 一个可能的最长回文子序列为 "bb"。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。思路:从后往前,从中间到两边一步步扩大。

2023-06-16 19:44:25 40

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

题目描述:给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。思路:其他的根据之前的经验很好想到,主要是初始化不同。

2023-06-13 21:00:59 90

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

字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是)字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。思路:通过dp后的结果与s的大小比较,如果相等就是子序列。

2023-06-13 20:50:39 54

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

题目描述:给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。思路:1.确定dp数组(dp table)以及下标的含义。

2023-06-11 22:54:40 180

原创 代码随想录算法训练营第37天|738.单调递增的数字

思路:感觉还是思维题...从尾巴开始,如果前一个大于后一个那么指针指向后一个,前一个-1(因为题目要求最后的数字要小于原来的那个数。遍历完之后指针指向的位置及其之后的位置全置为9。给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。

2023-06-11 22:33:21 51

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

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。二叉搜索树因为有着自己本身的特性,当最佳根节点的val处于两个节点之间时这个节点就是最佳公共祖先。给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。

2023-06-11 21:35:18 168

原创 代码随想录算法训练营第52天|300.最长递增子序列、674. 最长连续递增序列

连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。第一步为了初始化方便,dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

2023-06-10 00:18:30 244

原创 代码随想录算法训练营第51天|309.最佳买卖股票时机含冷冻期、

给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格;非负整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格。思路:确实就是买股票II那题多减个手续费。思路:记本子上的,感觉打字不太好描述。返回获得利润的最大值。

2023-06-10 00:05:45 52

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

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。返回你可以从这笔交易中获取的最大利润。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

2023-06-08 09:01:13 47

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

给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。期末考试周就直接贴代码了;

2023-06-08 08:57:38 45

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

同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。思路:假如说是要偷第i间房,由于两间连着的不能偷所以加的就是i-2的dp值,如果不偷第i间房那就可以用dp【i-1】的值。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,能够偷窃到的最高金额。

2023-06-05 21:30:02 38

原创 代码随想录算法训练营第46天|139.单词拆分

题目描述:给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。如果确定dp[j] 是true,且 [j, i] 这个区间的子串出现在字典里,那么dp[i]一定是true。所以递推公式是 if([j, i] 这个区间的子串出现在字典里 && dp[j]是true) 那么 dp[i] = true。第一步dp含义:dp【i】=true:s中的前i个单词都可以由列表中的单词拼出来。背包就是字符串s,物品就是列表中的单词。

2023-06-04 14:26:24 86

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

思路:之前写过这题,这次就是以完全背包的思想再来一次。跳楼梯是有顺序的,所以这是排列完全背包,背包就是要跳的阶数,物品就是跳一阶或者两阶。

2023-06-04 14:19:49 35

原创 代码随想录算法训练营第44天|518.零钱兑换II、377. 组合总和 Ⅳ

题目描述:给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。思路:因为每种硬币可以有无限个,并且是求组合数,所以要用到组合完全背包。组合求法就是先遍历物品后遍历背包,先遍历物品就可以避免重复组合情况的发生。

2023-06-04 13:48:00 54

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

题目描述:有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回 0。思路:和416分割等和子集差不多,就是把石头分为大小相等或相近的两拨,然后直接dp就行了。

2023-06-04 13:39:46 32

原创 代码随想录算法训练营第42天|416. 分割等和子集

思路:首先有个剪枝策略,就是数组和一定是偶数才能分。剩下的就是和0-1背包没差别了,背包大小就是数组和除以2。给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200。

2023-06-04 13:16:43 71

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

题目描述:给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。返回你可以获得的最大乘积。思路:挺难的。这题难就难在不知道怎么以动态规划的方法去解题。第一步dp数组含义:dp[j]:j这个数拆出来的整数的最大乘积第二步状态转移公式(最难推的):要有最大乘积首先有两种情况:dp【j】这个数都已经是最大的了也就是最佳拆分策略已出现,比如3,第二种就是还需要去拆去发现最佳策略。第二种情况又分为两种情况,第一种j和i-j直接相乘,这个意思就是i这个数就拆成两个数,然后看看是不是最大乘积。

2023-06-04 13:10:49 17

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

题目描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?思路:就按动规五部曲来第一步dp数组的含义:dp[i][j]表示到第i行j列的路径总数第二步状态转移公式:一个格子只能由通过其上方(i-1)或其左方(j-1)到达,所以dp[i][j]=dp[i-1][j]+dp[i][j-1];

2023-06-04 11:41:12 349

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

题目描述:斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 给你n ,请计算 F(n)。思路:简单的迭代过程,虽然是动态规划的入门题但是没有让人感受到状态转移公式的精妙的地方。

2023-06-02 16:10:07 27

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

题目描述:给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意: 可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。思路:和上一题打气球那题属于同类型的题,先选中一个方向进行排序处理,比如根据起点进行排序后再处理终点或者根据终点进行排序后再处理起点。排序就是让重叠的区间尽量靠拢,所以此题按起点排序和按终点排序都可以。

2023-06-02 15:51:18 22

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

思路:因为有很多气球区间是重叠的,所以我们就只用找重叠气球最多的区间射箭就是最优的。那么问题来了,我们是从气球的开始坐标开始处理还是从结束坐标开始处理呢?以开始坐标来进行排序,然后再处理排序后的序列。就按着分发糖果的思路来,先处理一个维度然后再处理第二个维度。先按身高来排序,这样身高维度的要求就满足了,然后再按第二属性的要求插入到返回序列中。思路:只有当客人给10块钱和20块钱的时候需要找零,找零只用找5元或15元,对于15元我的策略是先找10和5的组合然后才是找3个5的组合。

2023-06-01 11:34:58 39

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

题目描述:给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。以这种方式修改数组后,返回数组可能的最大和。思路:数组中是会有负数的,所以第一步就是负数取反。如果负数取反后还省下奇数次机会,那就把最小的那个数取反,如果剩下偶数次机会就可以直接返回数组和。

2023-05-30 23:28:07 23

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

题目描述:给定一个非负整数数组,你最初位于数组的第一个位置。你的目标是使用最少的跳跃次数到达数组的最后一个位置。相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。题目描述:给定一个非负整数数组,你最初位于数组的第一个位置。思路:对于本题的跳跃应该理解为一种覆盖,数组中的每一个数都应该被使用比较一次。设计一个算法来计算你所能获取的最大利润。思路:需要遍历数组每一个元素,动态的确定下一步的最大跳跃长度。

2023-05-28 17:28:39 16

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

对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。题目描述:如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。少于两个元素的序列也是摆动序列。题目描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。思路:贪心的思路确实不容易想到,感觉都是瞎蒙的。

2023-05-28 17:11:24 18

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

思路:这题的判重和之前的不太一样,因为本题的数组顺序是不能动的,就不能像之前一样利用排序和used来判重,这需要用数据结构set来进行判重。本题好像也就难在判重上,其他的都是判断一下就行了。给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。思路:重复的数组就需要判重,判重和之前的策略差不多,排序和used。题目描述:给定一个不含重复数字的数组。返回所有不重复的全排列。

2023-05-28 16:41:38 17

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

给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 '.' 来形成。首先对于截取的每一段都需要进行合法性判断,然后结束条件就是看已有的.的数量,如果点数为3且剩下的几个数合法就可以将结果加入res,否则直接返回。思路:很简单,只是因为还需要加入空集所以需要在最开始就将path加入到res中,因为数组中元素互不相同,所以其他的操作和回溯模板差不多。给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。

2023-05-28 16:25:21 14

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

去重的主要思想就是,如果两个挨着并且相同的元素,前一个元素在path集合中那么后一个元素也就可以使用。思路:如果直接暴力的话还是挺简单的,直接回溯穷举,就只用在入path之前判断一下区间字符串是不是回文串就行。给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

2023-05-28 16:05:44 15

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

思路:感觉想还是能很好想到,一开始都是自己敲的代码。但是我对string的操作不熟悉,都不知道string也有push_back和pop_back函数,都是看题解才知道。题目描述:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。题目描述:找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。解集不能包含重复的组合。思路:和第24天的差不多,只是多了一个计数判断。

2023-05-13 09:10:52 30

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

思路:基于二叉搜索树的特性,中序遍历时遇到val小于L的节点则直接进入其右节点,如果右节点符合条件直接返回右节点,就可以实现对此节点的删除操作。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。题目描述:给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。

2023-05-12 16:58:04 21

原创 代码随想录算法训练营第24天|77.组合

思路:组合数是不用排序的,所以要注意去重。回溯算法涉及递归很多人会想不明白,其实要用到回溯算法的题都可以把输出抽象成一个多叉树,当遍历到叶子节点就可以返回了。重复此操作,直到遍历完整棵树。这也就说明回溯其实是一种暴力算法,不适合在数据量大的情况下使用。题目描述:给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]leetcode77.组合。

2023-05-12 16:41:23 22

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

思路:直接在树上搜索,设置一个pre指针和一个cur指针。按照中序遍历,如果pre值等于cur值cnt就可加1,如果不等于cnt重置为1。这样就可实现不适用额外空间解题。思路:二叉搜索树中序遍历有序,可以直接在中序遍历结果中寻找最小绝对值差,最小的绝对值差肯定是出现在两个相邻值之间。思路:找到两节点后返回,当一个节点中第一次返回结果相等则为结果。530二叉搜索树的最小绝对值差。236二叉树的最近公共祖先。501二叉搜索树中的众数。

2023-05-11 11:37:32 56

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

思路:可以新生成一个二叉树,但没必要每个节点都申请。假如说A树没有右子树但B树有就可以直接将B树的右子树返回给根节点不必另申请空间。思路:二叉搜索树的中序遍历结果是有序的,直接从中序遍历结果是否有序就可以对二叉搜索树进行验证。思路:和中序后序确定前序差不多,每次先遍历找出最大的值然后以此为分割确定左右子树。思路:简单题,递归遍历返回节点就行。700二叉搜索树中的搜索。

2023-05-11 11:28:12 45

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

题目描述:给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。递归的话需要找最大深度那一层,还得注意最左边,所以需要后序遍历。分析:要注意target的范围是有正有负的,其他的就是判断的事了,要把递归返回条件判断清楚。题目描述:根据一棵树的中序遍历与后序遍历构造二叉树。分析:以前做过这题,其实就是根据中序遍历和后序遍历的特征确定根节点的左右子节点和根节点。题目描述:给定一个二叉树,在树的最后一行找到最左边的值。

2023-05-06 22:45:32 20

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

分析:需要先搜索到一个叶子节点才能将路径记录到返回的容器中,所以就需要一个int容器记录下当前的路径,在找到叶子节点时就可以直接将int容器记录的路径转化为字符串然后放到返回容器中。题目描述:给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。分析:左叶子不是左子树的叶子节点,而是叶子节点中是left的节点(根据样例来看确实是这样)。题目描述:计算给定二叉树的所有左叶子之和。leetcode257.二叉树的所有路径。leetcode404.左叶子之和。

2023-05-05 07:30:55 24

原创 代码随想录算法训练营第16天|222.完全二叉树的节点个数、110.平衡二叉树

分析:直接遍历确实很方便。但如果想要快一点就可以从完全二叉树这个点上优化,因为完全二叉树只有高度为1的这一层缺少节点数。只用通过比对节点下的左右子树高度,如果高度一样就返回2<<高度,否则就继续向下寻找。题目描述:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树。分析:直接向下遍历,然后逐层返回节点的最大深度就行了。题目描述:给出一个完全二叉树,求出该树的节点个数。leetcode222.完全二叉树的节点个数。的左右两个子树的高度差的绝对值不超过 1。

2023-05-04 07:45:03 41

原创 代码随想录算法训练营第15天|二叉树层序遍历、226.翻转二叉树、101.对称二叉树

分析:一开始本来想用宽度遍历的代码写,因为如果要对称,就只需要每一层的队列两边向中间慢慢比较就行了,如果不相同直接返回false,结果queue不能用下标访问。然后我又用dequeue,结果这玩意的size是一开始就申请一定空间也用不了。分析:之前用C写过,这次用的queue队列实现,也算是再重温了一遍了。就是将每一层的节点入队,然后按入队顺序依次存入其左右子节点。题目描述:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。题目描述:给定一个二叉树,检查它是否是镜像对称的。题目描述:翻转一棵二叉树。

2023-05-03 22:20:56 44

空空如也

空空如也

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

TA关注的人

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