2021-06-15动态规划


使用场景:

  • 求方案总数(90%)
  • 求最值(90%)
  • 求可行性(80%)

不适合的场景:

  • 找所有具体的方案(99%)
  • 输入数据无序(除背包问题外 60%)
  • 暴力算法就已经是多项式时间复杂度

动态规划的四要素:

  • 状态:递归的定义
  • 转移方程:递归的拆解
  • 初始化:递归的出口
  • 执行顺序:递归的调用

常见的动态规划:

  • 背包型
  • 区间型:大区间依赖小区间
  • 匹配型
  • 划分型
  • 接龙型

求方案数

70、爬楼梯 dp[i] = dp[i-1] + dp[i-2]

https://blog.csdn.net/qq_38595487/article/details/79686081
就是斐波拉契

class Solution {
    public int climbStairs(int n) {
        if (n < 3) {
            return n;
        }
        int res = 0;
        int i = 1, j = 2;
        for (int k = 3; k <= n; k++) {
            res = i + j;
            i = j;
            j = res;
        }
        return res;
    }
  }

198、盗窃抢劫 dp[i] = max(dp[i-2] + nums[i], dp[i-1])

213、盗窃在环形街区抢劫
信件错排 dp[i] = (i-1)*dp[i-2] + (i-1)*dp[i-1]
母牛生产 dp[i] = dp[i-1] + dp[i-3]
64、矩阵的最小矩阵和
62、矩阵的总路径数

数组区间

301、数组区间和 前缀和
413、数组中等差递增子区间的个数 if(A[i] - A[i-1] == A[i-1] - A[i-2]) 则dp[i] = dp[i-1] + 1

分割整数

343、分割整数的最大乘积 ***
279、按平方数来分割整数
91、分割整数构成字母字符串

最长递增子序列

300、最长递增子序列 dp[n] = max{ 1, dp[i] + 1 | Si < Sn && i < n}
646 、一组整数对能够构成的最长链
376、最长摆动子序列

最长公共子序列(双序列型)

背包问题:

0-1背包 容量为N的背包 对物品的迭代在最外层
完全背包:物品数据为无限个 对物品的迭代在最里层 ***
多重背包:物品数量有限制
多维费用背包:物品不仅有重量,还有体积
其他:物品之间相互约束或依赖
416、划分数组为相等的两部分 可看成一个背包大小为sum/2的0-1背包问题
494、改变一组数的正负号使得它们的和为一给定数 可以0-1背包或DFS
139、字符串按单词列表分割 完全背包
474、01字符构成最多的字符串 多维费用的0-1背包问题
322、找零钱的最少硬币数 完全背包
377、组合总和 完全背包

股票交易

309、需要冷静期的股票交易
714、需要交易费用的股票交易
123、只能进行两次的股票交易
188、只能进行K次的股票交易

字符串编辑

583、删除两个字符串的字符使它们相等 -> 可转化为最长公共子序列问题
72、编辑距离
650、复制粘贴字符

数字

最大公约数gcd return b==0 ?a : gcd(b, a % b);
最大公倍数lcm return a * b / gcd(a, b);

素数

204、生成素数序列

进制转换

504、7进制
405、 16进制
168、 26进制

阶乘

172、统计阶乘尾部有多少个0 *** 百度面试题 尾部的0由2*5得到

字符串加法减法

67、二进制加法
415、字符串加法

相遇问题

462、改变数组元素使所有的数组元素都相等

多数投票问题

169、数组中出现次数多于n/2的元素
其他
367、平方数 平方序列;1,4 ,9,16…. 间隔:3,5,7…
326、3的n次方
238、乘积数组 left数组和right数组,相乘
628、找出数组中的乘积最大的三个数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值