leetcode总结

1.背包

背包:0-1背包(每个物品个)、完全背包(每个物品无限个)

  1. 0-1背包关心第i个物品是否装。dp[i-1][j] (不装),dp[i-1][j-nums[]i] (装)
  2. 完全背包关心第i个物品是否装+装的是最后一个的情况。dp[i-1][j] (不装),dp[i][j-nums[i]] (装)
  3. 给定物品能够正好装满,动态规划
  4. 装的价值最多(有限个物品,无限个物品),动态规划

1.1背包问题总结

如果要按顺序,target在外面;如果重复,nums要正序
背包问题特征;给定一个target。target可以是数字也可以是字符串;在给定一个数组,数组中可能是数字,也可能是字符串;问:能够通过对nums排列组合得到target
三类:
第一类:组合问题: dp[i] += dp[i-num]
377. 组合总和 Ⅳ
494. 目标和
518. 零钱兑换 II
第二类:True、False问题: dp[i] = dp[i] or dp[i-num]
139. 单词拆分
416. 分割等和子集
第三类最大最小问题: dp[i] = min(dp[i], dp[i-num]+1)或者dp[i] = max(dp[i], dp[i-num]+1)
474. 一和零
322. 零钱兑换
背包问题技巧:

  1. 如果是0-1背包,即数组元素不可重复使用,nums放在外循环,target放在内循环,且内循环倒序
  2. 如果是完全背包问题,即数组的元素可重复使用,nums放在外循环,target放在内循环,且内循环正序
  3. 如果组合问题,需要考虑元素之间的顺序,需将target放在外循环,nums放在内循环,

2.回文

  1. 回文子串,中间往外扩散
  2. 回文子序列,动态规划

3.字符串匹配

  1. 两个字符串的最长公共序列,动态规划
  2. 两个字符串变为最长公共子序列的走法,动态规划
  3. 一个字符串变为另一个字符串的最少走法,动态规划

4.扔鸡蛋

  1. 扔鸡蛋确定楼层,动态规划

5.nSum

  1. twoSum->threeSum->…

6.不重叠区间

删除最少区间使得剩下的区间不重复,最多不重叠空间,使用最少的箭:最多不重叠空间问题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值