动态规划
文章平均质量分 93
leetcode中动态规划常见题目汇总
mingchen_peng
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode热题系列13
要求是连续的子数组,所以自然就想到了双指针法,也就是寻找一个连续的区间。但是细思之后没有理清左右边界移动的逻辑,遂弃。暴力解反正先暴力解一下吧:前缀和数组:构建数组sum[i]表示原数组前 i 个元素之和,比如sum[2] = A[0] + A[1]。原创 2024-08-11 16:45:20 · 866 阅读 · 0 评论 -
热题系列10
题解:动态规划dp[i][j]表示s[0:i-1]与s[0:j-1]是否可以交错组成s3[0:i+j-1]原创 2024-07-21 15:44:37 · 1100 阅读 · 0 评论 -
动态规划之子序列(三)
最长回文子序列、回文子串、编辑距离原创 2024-03-31 22:49:30 · 1113 阅读 · 0 评论 -
动态规划之子序列(二)
不想交的线、不同的子序列、最大子序和、判断子序列原创 2024-03-31 14:15:16 · 945 阅读 · 0 评论 -
动态规划之子序列(一)
最长递增子序列、最长重复子数组、最长连续递增序列原创 2024-03-31 12:06:49 · 1117 阅读 · 0 评论 -
股票系列(动态规划)
动态规划买卖股票系列原创 2024-03-17 17:10:59 · 1443 阅读 · 0 评论 -
leetcode 动态规划(单词拆分)
139.单词拆分力扣题目链接(opens new window)给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。原创 2024-01-13 22:01:45 · 1851 阅读 · 0 评论 -
leetcode 动态规划(爬楼梯、零钱兑换、完全平方数)
卡码网:57. 爬楼梯(opens new window)假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬至多m (1 <= m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。输入描述:输入共一行,包含两个正整数,分别表示n, m输出描述:输出一个整数,表示爬到楼顶的方法数。输入示例:3 2输出示例:3提示:当 m = 2,n = 3 时,n = 3 这表示一共有三个台阶,m = 2 代表你每次可以爬一个台阶或者两个台阶。原创 2024-01-12 20:12:21 · 1408 阅读 · 0 评论 -
leetcode动态规划(零钱兑换II、组合总和 Ⅳ)
如果把遍历nums(物品)放在外循环,遍历target的作为内循环的话,举一个例子:计算dp[4]的时候,结果集只有 {1,3} 这样的集合,不会有{3,1}这样的集合,因为nums遍历放在外层,3只能出现在1后面!所有可能的组合为: (1, 1, 1, 1) (1, 1, 2) (1, 2, 1) (1, 3) (2, 1, 1) (2, 2) (3, 1)因为递推公式dp[i] += dp[i - nums[j]]的缘故,dp[0]要初始化为1,这样递归其他dp[i]的时候才会有数值基础。原创 2024-01-11 22:31:39 · 1388 阅读 · 0 评论 -
leetcode 动态规划(最后一块石头的重量II、目标和、一和零)
本题其实和416. 分割等和子集 (opens new window)几乎是一样的,只是最后对dp[target]的处理方式不同。分割等和子集 (opens new window)相当于是求背包是否正好装满,而本题是求背包最多能装多少。for stone in stones: # 遍历物品for j in range(target, stone - 1, -1): # 遍历背包(简化版)二维DP版# 创建二维dp数组,行数为石头的数量加1,列数为target加1。原创 2024-01-10 21:20:34 · 1169 阅读 · 0 评论 -
动态规划(整数拆分、不同的二叉搜索树)
那么从1遍历j,比较(i - j) * j和dp[i - j] * j 取最大的。从递归公式上来讲,dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量] 中以j为头结点左子树节点数量为0,也需要dp[以j为头结点左子树节点数量] = 1, 否则乘法的结果就都变成0了。j的结束条件是 j < i - 1 ,其实 j < i 也是可以的,不过可以节省一步,例如让j = i - 1,的话,其实在 j = 1的时候,这一步就已经拆出来了,重复计算,所以 j < i - 1。原创 2024-01-08 20:52:43 · 864 阅读 · 0 评论 -
动态规划(不同路径1,不同路径2,整数拆分)
力扣题目链接(opens new window)一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 2, n = 3输出:3解释: 从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向右 -> 向下向右 -> 向下 -> 向右。原创 2024-01-06 16:16:30 · 1118 阅读 · 0 评论 -
leetcode 动态规划(斐波那契数列、 爬楼梯、使用最小花费爬楼梯)
斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 给你n ,请计算 F(n)。原创 2024-01-05 09:25:57 · 665 阅读 · 0 评论
分享