动态规划
文章平均质量分 80
动态规划
alone_yue
后端开发 算法 爱好健身打球游泳
展开
-
【Leetcode乘积最大子序列】152. 乘积最大子数组(子序列连续)
152.乘积最大子数组原创 2022-06-06 21:19:58 · 156 阅读 · 0 评论 -
【Leetcode二叉搜索树--动态规划】96. 不同的二叉搜索树
文章目录Leetcode961.问题描述2.解决方案Leetcode961.问题描述2.解决方案1.本题采用动态规划,说实话不看题解是不可能想出来的,思路下面有解释,我们更多关注本题做完的帮助2.第一就是记住,这种思路dp[i]依然就是答案,即以i个节点的二叉搜索树的数量,然后进行状态转移,状态转移时需要对j进行遍历class Solution { public int numTrees(int n) { //1.初始化 int[] dp=n原创 2022-02-20 22:13:21 · 366 阅读 · 2 评论 -
【Leetcode动态规划--矩阵路径数/和】62.不同路径 63.不同路径 II (矩阵路径数) 64.最小路径和(矩阵路径和)
文章目录1.问题描述2.解决方案1.问题描述2.解决方案动态规划,类似于爬楼梯class Solution { public int uniquePaths(int m, int n) { //1.初始化 int[][] ints = new int[m][n]; //2.边界,第一行第一列只有一种方法到达 for(int i=0; i<n; i++) ints[0][i]=1; for(int原创 2022-02-13 15:42:57 · 221 阅读 · 1 评论 -
【动态规划】动态规划总结
基本思路步骤1.根据题目要求设计出直接能得到答案的dp状态,也就是状态 dp[i][j] 代表什么状态2.原创 2021-09-04 15:10:18 · 126 阅读 · 0 评论 -
【Leetcode动态规划--回文】647.回文子串的数量(连续) 5.最长回文子串(连续) 516.最长回文子序列(不连续)
文章目录Leetcode6471.问题描述2.解决方案a.dp的定义就是回文的定义dp[i][j]:[i,j]闭区间是否为回文子串b.递推吧也不用多说,按照定义来就好c.遍历顺序要以递推逻辑来定,由下图可见d.由定义j>=i,所以遍历只遍一半就好,j从i开始Leetcode6471.问题描述2.解决方案a.dp的定义就是回文的定义dp[i][j]:[i,j]闭区间是否为回文子串b.递推吧也不用多说,按照定义来就好c.遍历顺序要以递推逻辑来定,由下图可见d.由定义j>=i,所以遍原创 2021-09-11 11:13:09 · 490 阅读 · 1 评论 -
【Leetcode子序列-编辑距离】115. 不同的子序列(一个字符串可以删除) 583. 两个字符串的删除操作(两个字符串都可以删除) 72. 编辑距离
文章目录Leetcode1151.问题描述2.解决方案a.dp的定义多看几遍和之前的公共子序列有所不同,dp[i][j]:以i-1结尾的s子序列中出现以j-1结尾的t的个数为dp[i][j],注意全部都是结尾而不是范围b.递推就和之前不太一样了,之前按道理dp定义为结尾的话只有一种状态来源,但是这道题特殊性,虽然s[i-1]==t[j-1]但是也可以匹配也可以不匹配c.初始化就很烦了d.遍历顺序就正常1到len就好e.经常会出现相加溢出的情况,直接把dp定义为无符号数64位表示的正数相当大,一般不会溢出了原创 2021-09-11 09:24:38 · 257 阅读 · 0 评论 -
【Leetcode公共子序列】718.最长重复子数组(子序列连续)1143.最长公共子序列(子序列不连续) 1035.不相交的线,392. 判断子序列(子序列不连续,这两道题和1143一摸一样)
文章目录Leetcode7181.问题描述2.解决方案递推很重要!!!!解法一:自己的dp定义,二维数组自己的dp定义:定义dp[i][j]为以下标 i 为结尾的A,和以下标 j 为结尾的B,最长重复子数组长度解法二:代码sxl实现合理的dp定义,二维数组代码sxl合理的dp定义:定义dp[i][j]为以下标 i-1 为结尾的A,和以下标 j-1 为结尾的B,最长重复子数组长度解法三:代码sxl实现合理的dp定义,二维数组滚动数组Leetcode7181.问题描述2.解决方案递推很重要!!!!原创 2021-09-09 14:25:46 · 396 阅读 · 1 评论 -
【Leetcode递增子序列】300. 最长递增子序列(子序列不连续) NC91最长上升子序列(三)(子序列不连续) 674. 最长连续递增序列(子序列连续)
文章目录Leetode3001.问题描述2.解决方案Leetode3001.问题描述2.解决方案代码sxl上有详细解答,这只做强调1.犯了一个不过脑子错误,最后要求的值不一定处在那个序列范围中,所以其实是dp[0]…dp[len-1]中的最大值,而不是dp[len-1]2.初始化都是13.递推也不错多看一看class Solution {public: int lengthOfLIS(vector<int>& nums) { //1.原创 2021-09-09 09:28:58 · 141 阅读 · 0 评论 -
【Leetcode动态规划--股票问题】121,122,123.买卖股票的最佳时机 I I III 188.买卖股票的最佳时机IV 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费
文章目录Leetcode1211.问题描述2.解决方案解法一:二维数组dp解法二:一维滚动数组dpLeetcode1211.问题描述2.解决方案解法一:二维数组dp代码sxl上有详细过程,这里只做强调1.//二维数组class Solution {public: int maxProfit(vector<int>& prices) { //1. int len=prices.size(); if(len==0原创 2021-09-08 11:36:24 · 151 阅读 · 1 评论 -
【Leetcode动态规划--打家劫舍】198.打家劫舍 213.打家劫舍II 337.打家劫舍III
Leetcode1981.问题描述2.解决方案代码sxl有详细过程,这里只做强调1.确定 dp[i] 中 i 的含义也就是背包的容量,一开始想确定为就是所有金额的和sum,后来觉得多此一举,既然就选不选两种,然后就以nums的下标作为 i 的含义,并且将题目给的数组求长度作为背包的容量也是常见的2.递推公式可以说比较巧妙,但也很好理解,就取不取两种取最大就好,一开始还想拿一个bool还确定取没取,后来发现不需要,交给前一个状态就好3.初始化 dp[0] dp[1] 是递归入口,其他不初始化都原创 2021-09-07 16:46:31 · 122 阅读 · 0 评论 -
【Leetcode动态规划--完全背包】279.完全平方数 139.单词拆分 322.零钱兑换 518.零钱兑换 II(求装满背包的方法数) 377.组合总和 Ⅳ
文章目录Leetcode5181.问题描述2.解决方案Leetcode5181.问题描述2.解决方案1.主要是把此问题转化成完全背包问题2.遍历顺序问题,先物品后背包得到组合数(无顺序),先背包后物品得到排列数(有顺序)3.递推是取不取相加,对应边界dp[0]=1,通过含义也可以得到或者由于是递推的终点所以必须是14.其他值初始化,由于是求相加为了不影响肯定是0了class Solution {public: int change(int amount, vector<in原创 2021-09-06 14:22:01 · 186 阅读 · 0 评论 -
【Leetcode动态规划--01背包】416.分割等和子集 1049. 最后一块石头的重量 II 494. 目标和(求装满背包的方法数) 474.一和零
文章目录Leetcode10491.问题描述2.解决方案Leetcode10491.问题描述2.解决方案没什么好说的,直接先证明(看成) 01 背包问题,然后直接dp就好,d代码sul上面有解析,这直接d上代码了class Solution {public: int lastStoneWeightII(vector<int>& stones) { //1. int len=stones.size(); int su原创 2021-09-05 17:59:45 · 179 阅读 · 0 评论 -
【Leetcode】53. 最大子序和(子序列连续)NC166 连续子数组的最大和(二) (子序列连续)
文章目录Leetcode531.问题描述2.解决方案解法一:dp解法二:dp(官方优化)Leetcode531.问题描述2.解决方案解法一:dp两份代码,第二份把Max设置为了nums[0],省去一次判断class Solution {public: int maxSubArray(vector<int>& nums) { if(nums.size()<=1) return nums[0]; //1.边界原创 2021-09-03 21:39:43 · 179 阅读 · 0 评论 -
【Leetcode】509. 斐波那契数(基础dp) 70. 爬楼梯(基础dp+完全背包)
文章目录Leetcode5091.问题描述2.解决方案解法一:递归使用dp记忆化搜索进行优化解法二:迭代dp解法三:矩阵快速幂(还没看)解法四:通项公式(还没看)Leetcode701.问题描述2.解决方案Leetcode5091.问题描述2.解决方案解法一:递归使用dp记忆化搜索进行优化就是递归要进行很多次重复计算,通过dp数组来将计算过的值记录下来,从而省去重复计算//递归加dp记忆化搜索优化class Solution {public: int dp[31]; v原创 2021-09-03 21:01:39 · 111 阅读 · 0 评论