- 博客(104)
- 收藏
- 关注
原创 二刷算法训练营Day55 (Day 54休息)| 动态规划(15/17)
dp[i][0] :以下标i-1为结尾的字符串word1,和空字符串word2,最近编辑距离为dp[i][0]。那么只需要一次替换的操作,就可以让 word1[i - 1] 和 word2[j - 1] 相同。那么dp[i][0]就应该是i,对word1里的元素全部做删除操作,即:dp[i][0] = i;相等了,那么就不用编辑了,以下标i-2为结尾的字符串word1和以下标j-2为结尾的字符串。其实用i来表示也可以!那么dp[i][0] 和 dp[0][j] 表示什么呢?同理dp[0][j] = j;
2024-07-08 22:03:25 862
原创 二刷算法训练营Day51 | 动态规划(12/17)
为什么一定表示 “以nums[i]结尾的最长递增子序” ,因为我们在 做 递增比较的时候,如果比较 nums[j] 和 nums[i] 的大小,那么两个递增子序列一定分别以nums[j]为结尾 和 nums[i]为结尾, 要不然这个比较就没有意义了,不是尾部元素的比较那么 如何算递增呢。子序列问题是动态规划解决的经典问题,当前下标i的递增子序列长度,其实和i之前的下表j的子序列长度有关系,那又是什么样的关系呢。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。就是连续递增子序列。
2024-07-04 11:50:48 449
原创 二刷算法训练营Day42 | 动态规划(4/17)
有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。每一回合,从中选出,然后将它们一起粉碎。假设石头的重量分别为x和y,且x
2024-06-25 23:39:22 632
原创 二刷算法训练营Day18 | 二叉树(5/9)
首先回忆一下如何根据两个顺序构造一个唯一的二叉树,相信理论知识大家应该都清楚,就是以 后序数组的最后一个元素为切割点,先切中序数组,根据中序数组,反过来再切后序数组。不要去累加然后判断是否等于目标和,那么代码比较麻烦,可以用递减,让计数器count初始为目标和,然后每次减去遍历路径节点上的数值。此时应该注意确定切割的标准,是左闭右开,还有左开右闭,还是左闭右闭,这个就是不变量,要在递归中保持这个不变量。图中可以看出,遍历的路线,并不要遍历整棵树,所以递归函数需要返回值,可以用bool类型表示。
2024-06-01 16:45:09 1063
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人