04 2022 档案

摘要:✅做题思路or感想 这道困扰我一刷好久的题终于在二刷的今天彻底理解了,通透啊! 这道题的难点在于递推公式和初始化 首先可以把题目按照自己的意思更大白话的复述一遍 题面:找 s的子序列中t出现的次数 复述:在s中挑选字符来组成t,求这个操作有几种方法 dp数组含义 dp[i][j]表示[0, i - 阅读全文
posted @ 2022-04-09 18:52 北原春希 阅读(55) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 法一:暴力 这道题一眼暴力,单指针遍历就可以解决,没什么好说的 class Solution { public: bool isSubsequence(string s, string t) { int index = 0; //单指针指向s for (int i = 0; i 阅读全文
posted @ 2022-04-09 13:56 北原春希 阅读(49) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 经典子序列问题,都适合用动态规划来解 子序列默认不连续,子数组默认连续! dp数组含义 子序列的题一般都这样子定义dp数组:dp[i][j]表示在test1的[0, i - 1]和test2的[0, j - 1]上最长的子序列长度(注意这里是范围里的最长子序列长度!) 为什么要这 阅读全文
posted @ 2022-04-08 18:24 北原春希 阅读(27) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 题目所求的转换一下其实就是求最大连续子序列的长度 最大连线数 = 最大连续子序列的长度 化为经典子序列问题,都适合用动态规划来解 子序列默认不连续,子数组默认连续! dp数组含义 子序列的题一般都这样子定义dp数组:dp[i][j]表示在nums1的[0, i - 1]和nums 阅读全文
posted @ 2022-04-08 18:24 北原春希 阅读(22) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 经典子序列问题,都适合用动态规划来解 子序列默认不连续,子数组默认连续! dp数组含义 子序列的题一般都这样子定义dp数组:dp[i][j]表示以nums1[i - 1]结尾和以nums2[j - 1]结尾的公共子数列长度 为什么要这样子定义呢,因为这样子更方便针对空子数组做操作 阅读全文
posted @ 2022-04-08 18:23 北原春希 阅读(32) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 暴力解法 “连续”,“递增”要素过多,一眼暴力 class Solution { public: int findLengthOfLCIS(vector<int>& nums) { int result = 1, sum = 1; for (int i = 1; i < nums 阅读全文
posted @ 2022-04-07 16:15 北原春希 阅读(43) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这种“最长递增子序列”是经典的动态规划的题,虽然我在看到的第一瞬间并没有反应过来用dp,可惜 dp数组含义 dp[i],以nums[i]结尾的最大递增子序列的长度 推导公式 当 nums[i] > nums[j] 时: nums[i]可以接在nums[j] 之后(此题要求严格递增 阅读全文
posted @ 2022-04-07 15:53 北原春希 阅读(34) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 一道股票问题,特点是在卖出的时候要考虑税收的因素 买入一次卖出一次算一次交易,所以在卖出那里扣税收就可以了 dp数组含义 dp[i][0]是第i天持有股票时能获得的最大利润 dp[i][1]是第i天没有股票时能获得的最大利润 推导公式 dp[i][0] = max(dp[i - 阅读全文
posted @ 2022-04-07 15:20 北原春希 阅读(16) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这一题不能用状态的方法去思考,会很绕。只关注卖出的那一天就好了 这里的处理是把冷冻期放进了dp[i][0]中一并考虑了 dp数组含义 0.不持股且当天没卖出,定义其最大收益dp[i][0]; 1.持股,定义其最大收益dp[i][1]; 2.不持股且当天卖出了,定义其最大收益dp[ 阅读全文
posted @ 2022-04-07 15:06 北原春希 阅读(31) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 股票问题 + 找规律,找到规律后就很简单了 顺便一说,一次交易包括一次卖出和买入!!!故这里总的交易次数是2 * k dp数组含义 dp[i][j]:第i天第j次交易持有股票的状态 dp[i][j + 1]:第i天第j次交易没有股票的状态 推导公式 不如来看一下k = 2时的递推 阅读全文
posted @ 2022-04-07 14:03 北原春希 阅读(21) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 考验的是对二维dp数组的理解和运用,一维是天数,二维是状态,了解了就很好做了 dp数组含义 dp[i][0]:第一次交易持有股票能获得的最大利润 dp[i][1]:第一次交易没有股票能获得的最大利润 dp[i][2]:第二次交易持有股票能获得的最大利润 dp[i][3]:第二次交 阅读全文
posted @ 2022-04-07 13:20 北原春希 阅读(25) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 经典股票问题,这一题的特点是:股票只能交易多次 而这和股票可以单次交易的区别在于推导公式 dp数组含义 dp[i][0]:第i 天持有股票的最大利润 dp[i][1]:第i天没有股票的最大利润 推导公式 持有股票的来源:可以前一天就有股票了,也可能是今天才买股票,二者取最大利润的 阅读全文
posted @ 2022-04-07 13:00 北原春希 阅读(23) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 经典股票问题,这一题的特点是:股票只能交易一次 而这和股票可以重复次交易的区别在于推导公式 dp数组含义 dp[i][0]:第i 天持有股票的最大利润 dp[i][1]:第i天没有股票的最大利润 推导公式 持有股票的来源:可以前一天就有股票了,也可能是今天才买股票,二者取最大利润 阅读全文
posted @ 2022-04-07 12:57 北原春希 阅读(25) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 看得出来是动态规划,但想了半天解不出来。。。。 可以转化为背包问题中的是否能把背包装满的问题,因为词典里的词可以重复用,所以这是一个完全背包 dp数组含义 dp[i]表示长度为i的字符串能不能被被分解(其实就是容量为i的背包能否被装满) 💡递推公式 设wordSize是遍历到的 阅读全文
posted @ 2022-04-07 12:35 北原春希 阅读(49) 评论(0) 推荐(0) 编辑
摘要:✅装满完全背包的最小物品总价值 仍然如题,不过这一题的每一个物品的价值需要自己算出来\ 其余的都是套模板的老生常谈了 class Solution { public: //装满完全背包后物品的最小总价值 int numSquares(int n) { vector<int>value; vector 阅读全文
posted @ 2022-04-05 21:38 北原春希 阅读(21) 评论(0) 推荐(0) 编辑
摘要:✅装满完全背包的最小物品总价值 这里类型如题,不过是把价值改成了个数 故在初始化dp数组时要注意初始化大一点。然后即是别忘了有dp[0] = 0,这个是求价值的基础 然后因为是完全背包,所以背包容量遍历顺序为正序 因为这里是求价值,跟物品是组合还是排列无关,所以这里既可以先遍历物品,在遍历背包容量, 阅读全文
posted @ 2022-04-05 21:17 北原春希 阅读(44) 评论(0) 推荐(0) 编辑
摘要:✅求装满背包的物品的排列总和 这里是求排列,而不是组合!!!即是[1,2], [2, 1]是两个东西 💡在背包问题里求排列的方法是: 排列:先遍历背包容量,再遍历物品 组合:先遍历物品,再遍历背包容量 这里再注意到这里是完全背包,再遍历背包容量的时候正序就好了 class Solution { p 阅读全文
posted @ 2022-04-05 20:54 北原春希 阅读(18) 评论(0) 推荐(0) 编辑
摘要:✅装满完全背包的方法数 经典完全背包的问题 dp数组的含义 dp[i]指装满容量为i的完全背包所用的方法数 递推公式 装满背包的方法的一般递推公式:dp[j] += dp[j - coins[i]] 初始化 老规矩,当容量为0时,装满它的方法只有一个:什么也不干,固有dp[0] = 1 遍历顺序 遍 阅读全文
posted @ 2022-04-05 20:38 北原春希 阅读(17) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 一道01背包问题,有所不同的是这里背包的价值是“个数” 这里每一个物品都有两种重量,所以背包也设有两种容量就好了,二维背包走起来 dp数组的含义 dp[i][j]表示容量为i,j的背包所能容纳的最大元素个数 递推公式 经典01背包公式的两个容量版,以及把价值变成了个数:dp[i] 阅读全文
posted @ 2022-04-05 20:21 北原春希 阅读(16) 评论(0) 推荐(0) 编辑
摘要:✅01背包中"装满背包有几种方法"的问题 这道题难就难在如何把题面转化为背包问题 💡由题知left + right = sum, left - right = target,故有left = (sum + target) / 2,则此时就转化为了装满容量为left的背包有几种方法 当然这里要讨论一 阅读全文
posted @ 2022-04-05 20:01 北原春希 阅读(177) 评论(0) 推荐(0) 编辑
摘要:✅01背包中是"否能装满"的问题 如果能把数组分割成两个子集且使得子集的元素和相等,那么证明该集合的元素总和必须要是能被2整除的,这是一个前提条件 假设总和为sum,那问题就转化成了余下的元素是否能装满容量为sum / 2的背包 再其次,因为每一个元素只能使用一次,所以这是一个0 - 1背包 💡这 阅读全文
posted @ 2022-04-05 19:24 北原春希 阅读(25) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这道题是我二刷代码随想录一路无双下来第一个遇到的一点思路也没有的题目,惭愧 dp数组的含义 dp[i]是指总节点数为n的不同二叉搜索树的种类 递推公式 在对dp[i]的遍历中,总节点数为n,取其中的j 为一个根节点,则这个节点的左边有j - 1个节点,右边有i - j个节点,故d 阅读全文
posted @ 2022-04-05 18:36 北原春希 阅读(12) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 其实做这道题的时候我一直在想,要不是看了一眼标签里有动态规划,这道题谁会知道要用动态规划来做啊? dp数组的含义 dp[i]指把整数n拆分后的最大乘积(这里的拆分至少是拆成两个数!,所以dp[i][j]至少是两个数的乘积) 递推公式 从1遍历到j,得到dp[i]的渠道有 (i - 阅读全文
posted @ 2022-04-05 18:24 北原春希 阅读(34) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 一眼图论,但其实是动态规划 这一题和上面一题不同,有了障碍物的设计 dp数组的含义 求什么就设什么。dp[i][j]是到达坐标(i, j)的不同路径数 递推公式 到达(i, j)的路径可以是从(i - 1, j)来,也可以是从(i, j - 1)来,题目求的是方法数,故这里就直接 阅读全文
posted @ 2022-04-05 16:40 北原春希 阅读(15) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 乍一看是一道图论题(实际上也可以用图论),但是可以用动态规划来解的题。 dp数组的含义 求什么就设什么。dp[i][j]是到达坐标(i, j)的不同路径数 递推公式 到达(i, j)的路径可以是从(i - 1, j)来,也可以是从(i, j - 1)来,题目求的是方法数,故这里就 阅读全文
posted @ 2022-04-05 16:35 北原春希 阅读(22) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这一题的题面就难读的离谱,可以引用一位大哥的话 我觉得这个题的描述应该改改:每个阶梯都有一定数量坨屎,一次只能跨一个或者两个阶梯,走到一个阶梯就要吃光上面的屎,问怎么走才能吃最少的屎?开局你选前两个阶梯的其中一个作为开头点,并吃光该阶梯的屎。 豁然开朗💡 dp数组的含义 求什么 阅读全文
posted @ 2022-04-05 16:29 北原春希 阅读(22) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这里和斐波那契的区别是这里是要求方法数 dp数组的含义 dp[n]意思是爬到第n阶台阶有的不同种的方法数 递推公式 爬到第n阶台阶有几种方法呢,可以从n - 1阶爬上来,也可以从 n - 2阶爬上来,故dp[n] = dp[n - 1] + dp[n - 2] 初始化 dp[0] 阅读全文
posted @ 2022-04-05 16:24 北原春希 阅读(19) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 直接dp四部曲(第五步是调试,故省) dp数组的含义 当值为n时,斐波那契数列f(n)的值 递推公式 题目已经给了:F(n) = F(n - 1) + F(n - 2),其中 n > 1 初始化 因为要确保n-2 >= 0,故这里要初始化到dp[1],而dp[1],dp[0]的值 阅读全文
posted @ 2022-04-05 16:18 北原春希 阅读(16) 评论(0) 推荐(0) 编辑
摘要:要去一个更大的舞台了也说不定,先走了 阅读全文
posted @ 2022-04-04 15:49 北原春希 阅读(13) 评论(1) 推荐(0) 编辑
摘要:✅做题思路or感想 一刷的我对这道题头痛不已,二刷的我一遍过,这种成就感是难以言说的。 而且这一次二刷的思路完全是根据自己的思路来设计的,我个人认为比Carl哥在书上写的思路更加浅显易懂。Carl哥在书上写的这道题的思路太绕了,而且用了好多奇怪的知识去解。 思路 大体思路是用两个变量start和en 阅读全文
posted @ 2022-04-04 15:44 北原春希 阅读(30) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 少有的二刷小障碍 大体思路是:为了让后面的数单调递减,最简单的方法就是把后面小的数直接改成9,让前面的数-1(相当于直接借了一位给后面,借一位给后面是最简单的方法了) 当然这道题还得先要老生常谈的化为字符串,才能对上面的数字实施精准修改 class Solution { publ 阅读全文
posted @ 2022-04-04 15:42 北原春希 阅读(43) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这题亦是一道贪心(这种题目不明所里的一看上去迷糊的一般都是贪心) 难点有二: 贪心策略 如何实现贪心的策略 贪心策略 这里的策略倒是很简单:只要射的箭都是往气球最重合的地方射,所用的数量就会最少 实现策略 这里为了让气球能够重合,所以要对原数组进行排序。难点在于如何对一个二维ve 阅读全文
posted @ 2022-04-04 14:35 北原春希 阅读(38) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这一题经典贪心 难点有二 如何模拟钱币交换的过程 贪心的策略 如何模拟钱币交换的过程 这里其实用三个数组分别来记录三种纸币的数量就可以了(是不是很简单) 贪心的策略 这里先分情况 客人付了5块钱。这个时候不需要找零 客人付了10块钱,需要找5块钱回去 客人付了20块钱,可以付3张 阅读全文
posted @ 2022-04-04 13:57 北原春希 阅读(20) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这道题与其说是考贪心,不如说是考思维。这种题都没有固定的模板,纯靠自己思维想出来,小难。 思路 这里不能同时从左右两边遍历,只能一边一边来 先从左往右遍历,确保右边分高的孩子能领到比左边孩子更多的糖果 再从右往左遍历,确保左边分高的孩子能领到比右边孩子更多的糖果 这个从右往左的遍 阅读全文
posted @ 2022-04-03 17:25 北原春希 阅读(13) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这道题思路来源于力扣上的大哥:鸭鸭鸭 我觉得我的思路已经完全跟不上他的强大了,故在这里分享一下他的评论吧 有一个环形路上有n个站点; 每个站点都有一个好人或一个坏人; 好人会给你钱,坏人会收你一定的过路费,如果你带的钱不够付过路费,坏人会跳起来把你砍死; 问:从哪个站点出发,能绕 阅读全文
posted @ 2022-04-03 16:47 北原春希 阅读(9) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这一题的主要思路是利用最大可移动距离来解题,而不是模拟一个小人一步步往前跳 多的不说了,全在代码里了 class Solution { public: int jump(vector<int>& nums) { if (nums.size() == 1)return 0; //防 阅读全文
posted @ 2022-04-03 16:26 北原春希 阅读(21) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这一题说是用贪心,我个人更倾向于是脑筋急转弯or单纯考察思维 这一题的大忌就是模拟一个人从初始点一个个跳格子,很容易把自己绕进去 这类题的真正思路应该是计算可跳的覆盖范围 如果可跳的覆盖范围覆盖了终点,则说明可以跳到终点 如果循环遍历结束了,覆盖范围都没有覆盖到终点,则说明不可言 阅读全文
posted @ 2022-04-03 15:50 北原春希 阅读(20) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 一眼暴力,可以用两个for嵌套来找子数组和,但是太费时了 故这里可以用一个for的贪心算法来解决 这里的贪心的策略是:当sum + num[i] < num[i],则sum = num[i] 如果原本积累的和 + 当前值 还比不上直接用当前值,那么就重新从当前值开始积累就好了 这 阅读全文
posted @ 2022-04-03 14:44 北原春希 阅读(25) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这题的思路源于力扣上的nwpuCfy,这位先生的思路可堪一绝 这一题代码随想录上用的是贪心,但是我贪心太糟糕了,故这里选用动态规划来解 这一题的dp的思路并不难,难的是怎么把这道题看成dp的题来做 dp四部曲 dp数组的意义 dp[i]表示的是[0, i - 1]上最长的摆动序列 阅读全文
posted @ 2022-04-03 14:21 北原春希 阅读(24) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 分饼干,经典贪心题 这里的贪心策略是:用最小的饼干去满足食量最少的小孩or用最大的饼干去满足食量最大的小孩 这里我用前者 class Solution { public: int findContentChildren(vector<int>& g, vector<int>& s 阅读全文
posted @ 2022-04-03 13:30 北原春希 阅读(18) 评论(0) 推荐(0) 编辑
摘要:Visibility可见性 in cpp 基本概念 c++中有三个基础的可见修饰符(访问修饰符):private,protected,public private:"只有"基类**(其实不止基类,因为还有一个东西叫做友元(friend))可以访问这些变量 friend是一个关键词,它可以把其他类或者 阅读全文
posted @ 2022-04-02 23:25 北原春希 阅读(93) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 (二刷直接初见过,在用时和内存消耗上远强于一刷,我真的成长了) 经典八皇后问题,回溯法理所应当 八皇后的要求:一个皇后的上下左右,以及斜线上不能有其他皇后 故这里的思路就是判断当前位置是否符合八皇后的要求,符合,则回溯递归,不符合,则continue 递归三部曲 递归参数 除了地 阅读全文
posted @ 2022-04-02 21:01 北原春希 阅读(15) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 求排列问题,用回溯法 这里和一般的排列问题的区别是:有重复的数字 然后因为是求排列,则同一个位置上的数字不能重复用 这就要求了:既要树层去重,又要树枝去重 而这些操作只用一个used数组就可以了 class Solution { public: vector<vector<int 阅读全文
posted @ 2022-04-02 20:24 北原春希 阅读(19) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 排列问题,一眼回溯法 排列问题注重元素间的排序,而集合问题不用。 故这里并不需要startIndex来进行控制元素取值范围,而是需要用used数组来记录元素是否使用过,避免一个元素的多次使用 递归三部曲 递归参数 用一个used数组来记录使用记录 递归中止条件 当temp和原数组 阅读全文
posted @ 2022-04-02 20:08 北原春希 阅读(26) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这一题依旧是子序列问题,用回溯法 然而这道题在有相同元素的情况下还要求不同的递增子序列,这就代表了不能对原数组进行排序!,因此就不能像前面一样用used数组进行树层去重了 我思来想去找不到更好的方法,只能靠用set强行去重来AC了,惭愧 class Solution { publ 阅读全文
posted @ 2022-04-02 19:55 北原春希 阅读(34) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这道题仍然是用回溯,和普通的求集合的题有区别的地方是:集合中有相同的元素 这里处理相同元素的做法是用一个used数组来做到树层去重,注意这种做法需要先对遍历的数组进行排序!!!!!!! 递归三部曲: 递归参数 这里除了老生常谈的startIndex外,还要额外加一个used数组进 阅读全文
posted @ 2022-04-02 19:22 北原春希 阅读(23) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 集合的经典问题,直接回溯法,递归三部曲。 递归参数 这里用一个startIndex来控制可选元素的范围,从而进行有效去重。这个做法老生常谈了 递归终止条件 这一题甚至不需要递归中止条件........ 单层递归逻辑 用result来实时记录变化的temp就好了 class Sol 阅读全文
posted @ 2022-04-02 19:00 北原春希 阅读(32) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这种字符串切割的问题都可以用回溯法来解决 递归三部曲: 递归参数 因为要切割字符串,所以要用一个startIndex来控制子串的开头位置,即是会切割出一个范围是[startIndex, i]的子串 递归中止条件 这里因为IP地址有正好四个整数(子串)构成,所以当切割的子串数量为4 阅读全文
posted @ 2022-04-02 18:48 北原春希 阅读(62) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这题的主题有两个:分割字符串,检查是否回文 难点在于第一点,这里用startIndex作为子串开始的地方,i作为子串结束的地方,用s.substr(startIndex, i - startIndex + 1)来分割出子串 递归单层逻辑就是判断子串是否回文,如果回文,则加入vec 阅读全文
posted @ 2022-04-02 17:29 北原春希 阅读(47) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这题主思路是回溯 要注意的是会有元素的重复,所以这里要做树层去重 以下去重是需要在排序后才能进行!!!! 在candidates[i]与candidates[i - 1]相同的情况下: 如果used[i - 1] == true,则说明同一树枝使用过candidates[i - 阅读全文
posted @ 2022-04-01 19:14 北原春希 阅读(24) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这里依旧是找组合,故依旧是用回溯法 而因为这里的元素是可以重复选取的,所以这里的startIndex在递归时不需要+1,或者直接干脆不用startIndex就可以了 但是为了防止[2,2,3],[2,3,2]这种重复,所以需要安排一下子集都是要递增的就好了 class Solut 阅读全文
posted @ 2022-04-01 12:18 北原春希 阅读(30) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 这种组合问题,直接用遍历搜索组合就好了 这里注意的是这里是分组的遍历,所以用一个group来控制分组! class Solution { public: //用一个表来记录电话字符串所代表的字符 const string letterMap[10] = { "", "", "ab 阅读全文
posted @ 2022-04-01 11:53 北原春希 阅读(43) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想 经典回溯 用startIndex来控制元素的范围,避免重复 class Solution { public: vector<int>vec; vector<vector<int>>result; void dfs(int k, int n, int startIndex) { / 阅读全文
posted @ 2022-04-01 11:18 北原春希 阅读(21) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想: 这道题用回溯的操作即可 值得注意的是这里为了让子集都是递增的(如[2,4],[3,5])所以这里要有一个startIndex来控制元素的范围,使得下一个加入的元素一定比当前处理的元素大 class Solution { public: vector<int>temp; vect 阅读全文
posted @ 2022-04-01 11:03 北原春希 阅读(28) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想: 构建二叉树的基本思想:找头节点,分割左右子树的序列 二叉搜索树的找头节点很简单:中间的节点就是头节点,并且就可以就着中间节点进行分割左右子树的序列 class Solution { public: TreeNode* sortedArrayToBST(vector<int>& 阅读全文
posted @ 2022-04-01 10:50 北原春希 阅读(19) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想: 这道题的主旋律是:将节点值控制在[low, high]中 这里因为会有删减的操作,所以还是要有父子节点间的赋值,故要用有返回值的递归函数比较方便,且因为要修改一整棵树,所以说要遍历整棵树 首先要明确带返回值的递归函数的代表意义,这里的递归函数表示的是修改好的搜索二叉树的头节点 阅读全文
posted @ 2022-04-01 10:32 北原春希 阅读(35) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示