动态规划
文章平均质量分 62
算法# 动态规划
不容君子
这个作者很懒,什么都没留下…
展开
-
Leetcode 376.摆动序列
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。例如,[1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。相反, [1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。原创 2023-03-23 22:35:13 · 138 阅读 · 0 评论 -
Leetcode 300. 最长递增子序列
【代码】Leetcode 300. 最长递增子序列。原创 2023-01-14 20:51:07 · 54 阅读 · 0 评论 -
Leetcode 638. 大礼包
【代码】Leetcode 638. 大礼包。原创 2022-12-21 22:10:21 · 94 阅读 · 0 评论 -
Leetcode 312. 戳气球
这个应该不难想到的,我们其实就是想穷举戳气球的顺序,不同的戳气球顺序可能得到不同的分数,我们需要把所有可能的分数中最高的那个找出来,对吧。关键在于 dp 数组的定义,需要避免子问题互相影响,所以我们反向思考,将 dp[i][j] 的定义设为开区间,考虑最后戳破的气球是哪一个,以此构建了状态转移方程。所以对于这个戳气球问题,如果想用动态规划,必须巧妙地定义 dp 数组的含义,避免子问题产生相关性,才能推出合理的状态转移方程。所以说,只要遇到求最值的算法问题,首先要思考的就是:如何穷举出所有可能的结果?原创 2022-12-10 22:26:25 · 119 阅读 · 0 评论 -
Leetcode 198. 打家劫舍
图解动态规划的解题四步骤(C++/Java/Python) - 打家劫舍 - 力扣(LeetCode)原创 2022-12-08 10:34:55 · 163 阅读 · 0 评论 -
Leetcode 518. 零钱兑换 II
这道题中,给定总金额 amount 和数组coins,要求计算金额之和等于 amount 的硬币组合数。其中,coins 的每个元素可以选取多次,且不考虑选取元素的顺序,因此这道题需要计算的是选取硬币的组合数。可以通过动态规划的方法计算可能的组合数。用dp[x] 表示金额之和等于 xx 的硬币组合数,目标是求 dp[amount]。动态规划的边界是 dp[0] = 1。只有当不选取任何硬币时,金额之和才为 0,因此只有 1 种硬币组合。对于面额为 coin 的硬币,当 coin ≤ i ≤ amount 时原创 2022-12-07 17:48:33 · 141 阅读 · 0 评论 -
Leetcode 343. 整数拆分
【代码】Leetcode 343. 整数拆分。动态规划原创 2022-12-02 20:43:45 · 80 阅读 · 0 评论 -
Leetcode 416.分割等和子集
0-1 背包」问题是一类非常重要的动态规划问题,一开始学习的时候,可能会觉得比较陌生。建议动笔计算,手动模拟填表的过程,其实就是画表格。这个过程非常重要,自己动手填过表,更能加深体会程序是如何执行的,也能更好地理解「空间优化」技巧的思路和好处。在编写代码完成以后,把数组dp打印出来,看看是不是与自己手算的一样。以加深体会动态规划的设计思想:「不是直接面对问题求解。原创 2022-11-27 17:06:21 · 289 阅读 · 0 评论