栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【剑指offer2】 chap14 动态规划

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【剑指offer2】 chap14 动态规划

十四、动态规划

分冶:

  • 无重叠,直接递归

  • 有重叠 ,建立 dp表

剑指 Offer II 088. 爬楼梯的最少成本

1.单序列问题
  • 两种空间优化方案

  • 剑指 Offer II 089. 房屋偷盗

  • 剑指 Offer II 090. 环形房屋偷盗

    • 分两种情况,借助helper

    • d[p]

  • 剑指 Offer II 091. 粉刷房子

    • 256. 粉刷房子

    • 265. 粉刷房子 II

    • 276. 栅栏涂色

    • 不含连续1的非负整数

    • 656. 金币路径

      • 从最后一个位置回退

      • 0<= i <=length-2

      • dp[i] = min(A[i] + dp[j])   i+1<=j<=min(i+B,length)   && A[j] >=0

      • next[i] = j of min_cost

      • 输出路径

        • 0<=i0——i+1

        • i == lenth -1 && coins[i] >= 0——length

        • else——null

    • 152. 乘积最大子数组

      • maxP[i] = max  (cur*maxP[i-1],   cur*minP[i-1],  cur)

      • minP[i] = min  (cur*maxP[i-1], cur*minP[i-1], cur)

      • 53. 最大子数组和      (线段树)

        • dp  O(n)

        • 前缀和

        • 分冶 

      • 740. 删除并获得点数

      • 978. 最长湍流子数组

      • 697. 数组的度

      • 股票问题系列通解(转载翻译)

      • https://labuladong.github.io/algo/3/26/96/

        • base case:

          • dp[-1][...][0] = dp[...][0][0] = 0

          • dp[-1][...][1] = dp[...][0][1] = -infinity

        • 状态转移方程:

          • dp[i][k][0] = max(dp[i-1][k][0], dp[i-1][k][1] + prices[i])

          • dp[i][k][1] = max(dp[i-1][k][1], dp[i-1][k-1][0] - prices[i])

121. 买卖股票的最佳时机

暴力解法、动态规划(Java)

122. 买卖股票的最佳时机 II

暴力搜索、贪心算法、动态规划(Java)

123. 买卖股票的最佳时机 III

动态规划(Java)

188. 买卖股票的最佳时机 IV

动态规划(「力扣」更新过用例,只有优化空间的版本可以 AC)

309. 最佳买卖股票时机含冷冻期

动态规划(Java)

714. 买卖股票的最佳时机含手续费

动态规划(Java)

  • 剑指 Offer II 092. 翻转字符    (双序列递推)

    • 末尾为0

    • 末尾为1

  • 剑指 Offer II 093. 最长斐波那契数列

  • 剑指 Offer II 094. 最少回文分割

int len = s.length();
//isPalindrome
boolean[][] isPal = new boolean[len][len];

for(int i = 0; i < len; i++){
    for(int j = 0; j <= i; j++){
        if(s.charAt(i) == s.charAt(j) && (i <= j + 1 || isPal[j+1][i-1])){
            isPal[j][i] = true;
        }
    }
}

2.双序列问题
  • 剑指 Offer II 095. 最长公共子序列

if(text1.charAt(i-1) == text2.charAt(j-1)){
    dp[i][j] = dp[i-1][j-1]+1;
}else{
    dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]);
}
    • 583. 两个字符串的删除操作  (转化一下)

return len1 + len2 - 2 * dp[len1][len2];

    • 712. 两个字符串的最小ASCII删除和

      • 注意 0 和另一字符串的 初始化    其他结构类似

  • 剑指 Offer II 096. 字符串交织

    • 注意行列边界初始化

dp[i + 1][j + 1] = (ch1 == ch3 && dp[i][j + 1]) || (ch2 == ch3 && dp[i + 1][j]);

  • 剑指 Offer II 097. 子序列的数目

3.矩阵路径问题

路径数量

路径的最大值,最小值

障碍物问题

剑指 Offer II 098. 路径的数目  无障碍物,求路径数

两种写法:二维数组,一维数组

63. 不同路径 II  (障碍物,求路径数)

两种写法:二维数组,一维数组

剑指 Offer II 099. 最小路径之和(无障碍物)

两种写法:二维数组,一维数组

174. 地下城游戏(障碍物,路径和)

剑指 Offer II 100. 三角形中最小路径之和

4.背包问题

问题特点

  • 信息:一组物品,物品重量,物品价格

  • 限定:总重量

  • 目标:总价格最高

问题细分:

  • 0-1背包问题:每种物品只有一个

  • 有界背包问题:每种物品有多个

  • 无限背包问题:每种物品有无穷多个

力扣

(1)0-1背包问题

剑指 Offer II 101. 分割等和子集

(2)有界背包问题

剑指 Offer II 102. 加减的目标值

(3)无限背包问题

剑指 Offer II 103. 最少的硬币数目

剑指 Offer II 104. 排列的数目

377. 组合总和 Ⅳ

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/877625.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号