动态规划
有关动态规划的题与理解。
安洁莉娅丶
这个作者很懒,什么都没留下…
展开
-
力扣工作周刷题 - 64. 最小路径和
2020.11.7原题:点击此处本道题以前看到的时候第一时间想到的是用BFS走迷宫的解法。后面发现回溯的时间复杂度特别高。于是看到“最小”两个字,有端联想到动态规划。于是用了个DP表格打了一下表,发现就是答案了。很常规的一道动态规划的题目,应该可以说是“简单”了。时间复杂度:O(mn)空间复杂度:O(mn)可以优化成O(n)具体代码过程,看代码注释。如果对DP有了解的同学们应该觉得看得懂。class Solution { //力扣64题 最小路径 public int原创 2020-11-07 15:18:00 · 168 阅读 · 0 评论 -
力扣工作周刷题 - 53. 最大子序和
2020.11.7原题:点击此处本道题可以有分治的做法,其中的思想是线段树,博主对这个思想还没有搞懂。。所以这里用的是相同时间复杂度的O(n),这道题可以说是152题的简单版,所以不做过多解释,有兴趣的同学可以直接去看152题,弄懂152题做这道题简直是信手拈来。152题题解class Solution { public int maxSubArray(int[] nums) { if(nums.length == 0){ return 0;原创 2020-11-07 15:03:12 · 106 阅读 · 0 评论 -
力扣工作周刷题 - 152.乘积最大序列和
2020.11.7原题:点击此处本道题很明显是一道动态规划的题目。直接在题目中给出“最大”的词眼。不过做了两次我还是没有做出来。。第一次的想法是用一个二维数组去不断根据上一行遍历,但是这样的话会因为出现0,导致代码非常臃肿且易错。第二次看了题解之后还是错了。本道题的原处思路是分类讨论,并且分类讨论的情况还比较多的。首先,我们要建立的DP数组为dpMax[i]它的含义是 以i为结尾的最大序列和乘积是多少,所以必定是包含nums[i]的以下我们进行分类讨论。1、当nums[i] >=原创 2020-11-07 10:32:01 · 115 阅读 · 0 评论 -
力扣工作周刷题 - 474. 一和零
2020.10.12原题:点击此处考点:变形01背包难点:经典01背包中只有1种背包,本题中,背包有两种,一种装0,一种装1。题解:1、本题前提:构造一个函数,对一个01字符串,计算其0的数量以及1的数量,返回一个数组count【2】;2、本题可以借助01背包的经典解决方法,创建三维数组。【前i个字符串】【0的容量】【1的容量】状态转移方程:dp【k】【i】【j】 = dp【k-1】【i】【j】;if(0的容量>count【0】 && 1的容量 > count【1原创 2020-10-12 15:09:28 · 136 阅读 · 0 评论 -
力扣工作周刷题 - 221. 最大正方形
2020.10.11原题:点击此处题解:1、原本使用BFS去做(超时)2、采用DP方法。状态转移方程DP[i][j] = Min( dp[i-1][j],dp[i][j-1],dp[i-1][j-1] ) + 1是个非常奇妙的方法,原理在于此图:题解图转自侵权则删除可以尝试图通过举反例,来加深理解(证明反例不存在)class Solution { public int maximalSquare(char[][] matrix) { if(matrix.lengt原创 2020-10-12 11:06:07 · 91 阅读 · 0 评论 -
力扣工作周刷题 - 416题 分割等和子集
2020.10.11原题:点击此处考点:01背包变形题解:1、如果n<2,必定不能分割为2个子集。2、计算数组和,如果和不是偶数,必定也不能分割。3、记录数组最大值,如果数组和除以2后小于最大值,那么也必定不能分割。dp[i][j] 表示从数组的 [0,i] 下标范围内选取若干个正整数(可以是 0个),是否存在一种选取方案使得被选取的正整数的和等于j。————————————————————————dp数组定义:dp[n][target + 1]target = sum / 2原创 2020-10-11 16:40:46 · 147 阅读 · 0 评论 -
力扣周末回顾9 - 300题 最长上升子序列
2020.3.29力扣回顾第九题:点击此处考点:动态规划,贪心二分题目:找到一个无序数组里面的最长上升子序列。题解:1.依旧是动态规划的五部曲,而这道题中动态规划的状态全都要保留,不能进行压缩。2.这道题没有多余的条件,只需要考虑一维的DP数组(往二维考虑让问题变得非常难解决)3.dp数组的含义是**“以当前数字结尾的上升序列的长度”**,因此每次都要往前找比当前数字小的数字,且序...原创 2020-03-29 11:58:23 · 114 阅读 · 0 评论 -
力扣周末回顾6 - 5题 最长回文子串
力扣周末回顾题6题目出处:点击此处考点:动态规划,字符串,回文,中心扩散法(本博文不涉及)回顾:动态规划五要素:1.判断状态是否转移(是否能用dp数组表示?)2.状态转移方程表示(dp数组的判断,相当于分类讨论)3.初始化(考虑边界)4.输出(验证结果)5.压缩,优化。题解:1.找到最长的回文子串(注意三个个限定:最长,回文,子串)考虑到肯定设计到穷举+剪枝,必定可以用状...原创 2020-03-22 16:13:53 · 139 阅读 · 0 评论 -
力扣周末回顾3-123题买卖股票的最佳时机 III
这里是力扣回顾的第三题,这道题属于121,122的进阶题,在力扣难度为“困难”,这道题我主要花了很多时间去理解动态规划的内容,所以我这里也只贴动态规划的代码。这道题跟前两题不一样,画图可以帮助我们理解,但是对解题没有实质的帮助。原题:点击此处题解借鉴:点击这里什么是动态规划?一种说法是:把大问题分类讨论成几个小问题,小问题的最优解构成了大问题的当前问题的最优解。其实我更喜欢另一种说法:...原创 2020-03-15 21:58:03 · 142 阅读 · 0 评论