![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode动态规划
文章平均质量分 56
LeetCode动态规划
overlordmax
这个作者很懒,什么都没留下…
展开
-
718. 最长重复子数组
1.题目描述给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例:提示:1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 1002.思路dp[i][j]表示以i,j结尾的最长公共子数组的长度初始状态:dp[0][0] = 0,空数组的最长公共子数组的长度为0状态转移方程:dp[i][j] = dp[i-1][j-1] + 1,if A[i-1] == B[j-1]结果:dp[i][j]的最大值原创 2021-02-19 16:12:34 · 65 阅读 · 0 评论 -
97. 交错字符串
1.题目描述给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。两个字符串 s 和 t 交错的定义与过程如下,其中每个字符串都会被分割成若干非空子字符串:s = s1 + s2 + … + snt = t1 + t2 + … + tm|n - m| <= 1交错是 s1 + t1 + s2 + t2 + s3 + t3 + … 或者 t1 + s1 + t2 + s2 + t3 + s3 + …提示:a + b 意味着字符串 a 和 b 连接。原创 2021-02-08 12:24:39 · 127 阅读 · 0 评论 -
1235. 规划兼职工作
你打算利用空闲时间来做兼职工作赚些零花钱。这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 profit[i]。给你一份兼职工作表,包含开始时间 startTime,结束时间 endTime 和预计报酬 profit 三个数组,请你计算并返回可以获得的最大报酬。注意,时间上出现重叠的 2 份工作不能同时进行。如果你选择的工作在时间 X 结束,那么你可以立刻进行在时间 X 开始的下一份工作。示例 1:示例 2:示例 3:提示:原创 2021-01-31 15:52:30 · 143 阅读 · 0 评论 -
516. 最长回文子序列
1.题目描述给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。示例 1:输入:输出:一个可能的最长回文子序列为 “bbbb”。示例 2:输入:一个可能的最长回文子序列为 “bb”。提示:1 <= s.length <= 1000s 只包含小写英文字母2.思路(动态规划)状态:dp[i][j] 表示 s 的第 i 个字符到第 j 个字符组成的子串中,最长的回文序列长度是多少。转移方程:如果 s 的第 i原创 2021-01-12 21:59:16 · 118 阅读 · 0 评论 -
面试题 17.24. 最大子矩阵
1.题目描述给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。注意:本题相对书上原题稍作改动示例:说明:1 <= matrix.length, matrix[0].length <= 2002.思路需要将二维转化为一维,对于矩阵的每一列,我们将其加在一起原创 2020-09-28 18:37:55 · 227 阅读 · 0 评论 -
一种规律搞定背包问题
1.题目描述常见的背包问题有:1、组合问题。2、True、False问题。3、最大最小问题。1、组合问题:377. 组合总和 Ⅳ494. 目标和518. 零钱兑换 II2、True、False问题:139. 单词拆分416. 分割等和子集3、最大最小问题:474. 一和零322. 零钱兑换2.思路组合问题公式dp[i] += dp[i-num]True、False问题公式dp[i] = dp[i] or dp[i-num]最大最小问题公式dp[i] = min(dp[原创 2020-09-12 21:50:54 · 161 阅读 · 0 评论 -
494. 目标和
1.题目描述给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例:提示:1.数组非空,且长度不会超过 20 。2.初始的数组的和不会超过 1000 。3.保证返回的最终结果能被 32 位整数存下。2.动态规划把所有符号为正的数总和设为一个背包的容量,容量为x;把所有符号为负的数总和设为一个背包的容量,容量为原创 2020-09-12 21:28:55 · 85 阅读 · 0 评论 -
44. 通配符匹配
1.题目描述给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。两个字符串完全匹配才算匹配成功。说明:1.s 可能为空,且只包含从 a-z 的小写字母。2.p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:示例 2:示例 3:示例 4:示例 5:2.思路(动态规划)在给定的模式 p 中,只会有三种类型的字符出现:1.小写字母 a-z,可以匹配对应的一个小写字母;2.问号 ?,可以匹配任意一个小写字母原创 2020-08-28 20:09:08 · 472 阅读 · 0 评论 -
338. 比特位计数
338. 比特位计数1.题目描述给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:示例 2:进阶:1.给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗?2.要求算法的空间复杂度为O(n)。3.你能进一步完善解法吗?要求在...原创 2020-03-05 20:51:15 · 74 阅读 · 0 评论 -
337. 打家劫舍 III
337. 打家劫舍 III1.题目描述在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金...原创 2020-03-04 23:20:00 · 113 阅读 · 0 评论 -
152. 乘积最大子序列
152. 乘积最大子序列1.题目描述给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:示例 2:2.思路(动态规划)(1)状态定义:dp[i]表示以i结尾的子序列的最大乘积。(2)转移方程:dp[i] = max(dp[i-1]*nums[i],num[i]),考虑前面的子序列和不考虑前面的子序列。以i-1结尾的子序列的最大乘积乘...原创 2020-03-02 19:57:05 · 126 阅读 · 0 评论 -
650. 只有两个键的键盘
650. 只有两个键的键盘1.题目描述最初在一个记事本上只有一个字符 ‘A’。你每次可以对这个记事本进行两种操作:1.Copy All (复制全部) : 你可以复制这个记事本中的所有字符(部分的复制是不允许的)。2.Paste (粘贴) : 你可以粘贴你上一次复制的字符。给定一个数字 n 。你需要使用最少的操作次数,在记事本中打印出恰好 n 个 ‘A’。输出能够打印出 n 个 ‘A’ 的...原创 2020-02-27 22:18:25 · 187 阅读 · 0 评论 -
583. 两个字符串的删除操作
583. 两个字符串的删除操作1.题目描述给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。示例 1:说明:1.给定单词的长度不超过500。2.给定单词中的字符只含有小写字母。2.方法1(利用最长公共子序列) 为了求得最少删除次数,我们可以求出串 s1s1 和串 s2s2 最长公共子序列,...原创 2020-02-27 00:29:06 · 266 阅读 · 0 评论 -
377. 组合总和 Ⅳ
377. 组合总和 Ⅳ1.题目描述给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。示例:进阶:如果给定的数组中含有负数会怎么样?问题会产生什么变化?我们需要在题目中添加什么限制来允许负数的出现?2.思路(动态规划)涉及顺序的完全背包问题。(1)状态定义:dp[i]和为i的组合个数(2)转移方程:dp[i] = dp[i] + dp[i-num...原创 2020-02-26 20:43:37 · 190 阅读 · 0 评论 -
139. 单词拆分
139. 单词拆分1.题目描述给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:示例 2:示例 3:2.思路(动态规划)dict 中的单词没有使用次数的限制,因此这是一个完全背包问题。求解顺序的完全背包问题时,对...原创 2020-02-26 20:08:53 · 106 阅读 · 0 评论 -
518. 零钱兑换 II
518. 零钱兑换 II1.题目描述给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:示例 2:示例 3:你可以假设:(1)0 <= amount (总金额) <= 5000(2)1 <= coin (硬币面额) <= 5000(3)硬币种类不超过 500 种(4)结果符合 32 位符...原创 2020-02-24 23:12:35 · 220 阅读 · 0 评论 -
474. 一和零
474. 一和零1.题目描述在计算机界中,我们总是追求用有限的资源获取最大的收益。现在,假设你分别支配着 m 个 0 和 n 个 1。另外,还有一个仅包含 0 和 1 字符串的数组。你的任务是使用给定的 m 个 0 和 n 个 1 ,找到能拼出存在于数组中的字符串的最大数量。每个 0 和 1 至多被使用一次。注意:1.给定 0 和 1 的数量都不会超过 100。2.给定字符串数组的长度不...原创 2020-02-24 20:45:59 · 251 阅读 · 0 评论 -
416. 分割等和子集
416. 分割等和子集1.题目描述给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:(1)每个数组中的元素不会超过 100(2)数组的大小不会超过 200示例 1:示例 2:2.思路(动态规划)可以看成一个背包大小为 sum/2 的 0-1 背包问题。1.状态定义:dp[i][j]表示从数组的 [0, i] 这个子区间内挑选一...原创 2020-02-24 13:34:59 · 136 阅读 · 0 评论 -
0-1背包问题
1.定义 有一个容量为 N 的背包,要用这个背包装下物品使得价值最大,这些物品有两个属性:体积 w 和价值 v。 定义一个二维数组 dp 存储最大价值,其中 dp[i][j] 表示前 i 件物品体积不超过 j 的情况下能达到的最大价值。设第 i 件物品体积为 w,价值为 v,根据第 i 件物品是否添加到背包中,可以分两种情况讨论:(1)第 i 件物品没添加到背包,总体积不超过 j 的前 ...原创 2020-02-24 12:39:30 · 214 阅读 · 0 评论 -
376. 摆动序列
376. 摆动序列1.题目描述如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正...原创 2020-02-23 22:56:27 · 99 阅读 · 0 评论 -
646. 最长数对链
646. 最长数对链1.题目描述给出 n 个数对。 在每一个数对中,第一个数字总是比第二个数字小。现在,我们定义一种跟随关系,当且仅当 b < c 时,数对(c, d) 才可以跟在 (a, b) 后面。我们用这种形式来构造一个数对链。给定一个对数集合,找出能够形成的最长数对链的长度。你不需要用到所有的数对,你可以以任何顺序选择其中的一些数对来构造。示例 :注意:给出数对的个数...原创 2020-02-23 12:21:18 · 153 阅读 · 0 评论 -
把数字翻译成字符串
把数字翻译成字符串1.题目描述一条包含字母 A-Z 的消息通过以下方式进行了编码:给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:示例 2:2.思路利用动态规划1.dp[i]为s[0…i]的译码方法总数2.分情况讨论:(1)若s[i] = ‘0’,那么如果s[i-1]=‘1’ or ‘2’,则dp[i] = dp[i-2];否则返回0。解释:s[i-1]...原创 2020-02-01 23:10:36 · 157 阅读 · 0 评论 -
279. 完全平方数
279. 完全平方数1.题目描述给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:示例 2:2.思路(动态规划)假设最小完全平方的个数ƒ(n)=mƒ(n) = mƒ(n)=m,那么nnn的值满足下列公式 ∑(A[i]∗A[i])=n∑(A[i] * A[i]) = n∑(A[i]∗A[i]...原创 2020-02-23 09:51:20 · 120 阅读 · 0 评论 -
343. 整数拆分
343. 整数拆分1.题目描述给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:示例 2:说明: 你可以假设 n 不小于 2 且不大于 58。2.思路动态规划,转移方程:result[i]=max(result[i],max(j∗result[i−j],j∗(i−j)))result[i] = max(result[...原创 2020-02-22 22:20:58 · 431 阅读 · 0 评论 -
413. 等差数列划分
413. 等差数列划分1.题目描述如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,以下数列为等差数列:以下数列不是等差数列。数组 A 包含 N 个数,且索引从0开始。数组 A 的一个子数组划分为数组 (P, Q),P 与 Q 是整数且满足 0<=P<Q<N 。如果满足以下条件,则称子数组(P, Q)为等差数组:元素 A[P]...原创 2020-02-22 20:39:46 · 136 阅读 · 0 评论 -
303. 区域和检索 - 数组不可变
303. 区域和检索 - 数组不可变1.题目描述给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。示例:说明:1.你可以假设数组不可变。2.会多次调用 sumRange 方法。2.思路求区间 i ~ j 的和,可以转换为 sum[j + 1] - sum[i],其中 sum[i] 为 0 ~ i - 1 的和。...原创 2020-02-22 20:09:27 · 106 阅读 · 0 评论 -
62. 不同路径
62. 不同路径1.题目描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?说明:m 和 n 的值均不超过 100。示例 1:示例 2:2.思路动态规划,我们令 dp[i][j] 是到达 i, j 最多路径,动...原创 2020-02-22 18:23:14 · 81 阅读 · 0 评论 -
213. 打家劫舍 II
213. 打家劫舍 II1.题目描述你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:示例 2...原创 2020-02-22 13:07:30 · 212 阅读 · 0 评论 -
198. 打家劫舍
198. 打家劫舍1.题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:示例 2:2.思路定义 dp 数组用来存储最大的抢劫量,其中...原创 2020-02-22 12:51:17 · 196 阅读 · 0 评论 -
70.青蛙跳台阶(爬楼梯)
青蛙跳台阶1.题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。2.思路动态规划,问题转化为斐波那契数列问题,f(0)=0,f(1)=1,f(2)=2......f(n)=f(n−1)+f(n−2),n>=3f(0) = 0,f(1)=1,f(2)=2......f(n) = f(n-1) + f(n-2),...原创 2020-01-09 23:26:01 · 1110 阅读 · 0 评论 -
72. 编辑距离
72. 编辑距离1.题目描述给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:1.插入一个字符2.删除一个字符3.替换一个字符示例 1:示例 2:2.思路dp[i][j] 代表 word1 到 i 位置转换成 word2 到 j 位置需要最少步数。对于每对字符 word1[i] 和 w...原创 2020-02-13 22:16:20 · 89 阅读 · 0 评论 -
300. 最长上升子序列
300. 最长上升子序列1.题目描述给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2)O(n2)O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(nlogn)O(n log n)O(nlogn) 吗?2.方法1(动态规划) 定义dp[i]dp[i]dp[i] ...原创 2020-02-13 14:20:35 · 172 阅读 · 0 评论 -
322. 零钱兑换
322. 零钱兑换1.题目描述给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:示例 2:说明:你可以认为每种硬币的数量是无限的。2.思路状态转移方程f(n)={0,n=0−1,n<0min(dp[n],dp[n−coin]),n>0 ...原创 2020-02-12 20:35:26 · 101 阅读 · 0 评论 -
1143. 最长公共子序列
1143. 最长公共子序列1.题目描述给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列。一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共...原创 2020-02-07 12:10:30 · 111 阅读 · 0 评论 -
221. 最大正方形
221. 最大正方形1.题目描述在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:2.思路动态规划的状态转移方程为:dp[i][j]=min(dp[i-1][j], dp[i-1][j-1], dp[i][j-1])+1,其中dp数组用来存储以第i行第j列元素为右下角的最大正方形的边长,由于输入的矩阵为0-1矩阵,所以输入矩阵可以直接作为我们需要...原创 2020-02-05 12:54:21 · 125 阅读 · 0 评论 -
64. 最小路径和
64. 最小路径和1.题目描述给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:2.思路动态规划:grid(i,j)=grid(i,j)+min(grid(i-1,j),grid(i,j-1))边界条件:边界条件:1.在第0行第0列:grid(i,j) = grid(i,j)2.在第...原创 2020-02-02 14:33:03 · 88 阅读 · 0 评论