![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode——动态规划
akun+
~
展开
-
动态规划——爬楼梯
用滚动数组的思想。滚动数组是一种能够在动态规划中降低空间复杂度的方法。有时某些二维dp方程可以直接降阶到一维,在某些题目中甚至可以降低时间复杂度,是一种极为巧妙的思想。简要来说就是通过观察dp方程来判断需要使用哪些数据,可以抛弃哪些数据,一旦找到关系,就可以用新的数据不断覆盖旧的数据量来减少空间的使用。例如此题,每次只需保留前两个。class Solution { public int climbStairs(int n) { int p=0,q=0,r=1;...原创 2021-08-14 21:44:14 · 94 阅读 · 0 评论 -
动态规划方法
基本思想动态规划是一种将问题实例分解为更小的,相似的子问题,并存储子问题的解,使得每个子问题只求解一次,最终获得原问题的答案,以解决最优化问题的策略。引用:https://blog.csdn.net/u013250416/article/details/80558542用一个例子来看一下 递归,记忆化搜索,动态规划的区别斐波那契数列:f(i)=f(i−1)+f(i−2),i>=31. 递归。有大量的重复计算int f(int n){ if(n == 1 || .原创 2021-08-14 21:32:23 · 203 阅读 · 0 评论 -
动态规划——不同路径II
解析:与“不同路径I”类似,只不过多了一些判断。用一个二维数组保存每一个位置的路径数。当赋值0行0列时,如果碰到障碍物,则此位置为0,且之后的位置也无法到达,也为0;然后赋值剩余的位置,如果是障碍物则为0,不是则为上面和左面的加和。(答案中用一维数组保存的方法我没理解......)Java:class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { int m=o...原创 2021-08-14 20:29:49 · 172 阅读 · 0 评论 -
动态规划——不同路径
一、数学方式从m+n-2格中选出m-1个向下的格Java:class Solution { public int uniquePaths(int m, int n) { long steps=1;//注意这里的类型 for(int x=n,y=1;y<m;x++,y++){ steps=steps*x/y; } return (int)steps;//这里需要类型转换 }...原创 2021-08-12 22:38:09 · 79 阅读 · 0 评论 -
动态规划——跳跃游戏
class Solution { public boolean canJump(int[] nums) { int maxPosition=0,n=nums.length; for(int i=0;i<n;i++){ if(i<=maxPosition){ maxPosition=Math.max(maxPosition,nums[i]+i);//能到达的最远距离 ...原创 2021-08-12 21:49:28 · 97 阅读 · 0 评论 -
动态规划——最大子序和
Java: 两种思路class Solution { public int maxSubArray(int[] nums) { if(nums.length==1) return nums[0]; int ans=nums[0],max=nums[0]; for(int i=1;i<nums.length;i++){ if(ans<0){ ans=0;//如果此时小于0,则归..原创 2021-08-12 19:52:11 · 56 阅读 · 0 评论 -
动态规划——跳跃游戏II
一、正序每次找能到达的最远端,然后保存最远端的位置。注意 其实各个位置之间并不干扰,此位置能到达哪里只决定于此位置的i和nums[i]所以,我们需要遍历所有的i,因为我们需要找到每一步的最大值。所以外循环就固定下来了。然后我们需要在每一步之内算出最大值,所以就需要一个max来存储,每次都更新max,直至i==end的时候,保存max为end。Java:class Solution { public int jump(int[] nums) { int e..原创 2021-08-12 18:35:59 · 212 阅读 · 1 评论 -
动态规划——括号生成
深度优先搜索:有剩余的左括号,则有左子树;有剩余的右括号,则有右子树。但如果剩余的左括号严格大小剩余的右括号,则剪枝return。当两者都为0时,则找到一种情况。Java:class Solution { public List<String> generateParenthesis(int n) { //深度优先搜索,减枝 List<String> list=new ArrayList<String>();...原创 2021-08-09 17:29:55 · 224 阅读 · 0 评论