mirror of
https://gitee.com/TheAlgorithms/LeetCodeAnimation.git
synced 2024-12-06 15:19:44 +08:00
浅谈什么是动态规划以及相关的「股票」算法题
This commit is contained in:
parent
d207212717
commit
1c20a18367
@ -2,23 +2,27 @@
|
||||
|
||||
# 浅谈什么是动态规划以及相关的「股票」算法题
|
||||
|
||||
> 本文首发于公众号「五分钟学算法」,是[图解 LeetCode ](<https://github.com/MisterBooo/LeetCodeAnimation>)系列文章之一。
|
||||
>
|
||||
> 个人网站:[https://www.cxyxiaowu.com](https://www.cxyxiaowu.com)
|
||||
|
||||
## 动态规划
|
||||
|
||||
### 1 概念
|
||||
|
||||
**动态规划**算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。在学习动态规划之前需要明确掌握几个重要概念。
|
||||
|
||||
**阶段:**对于一个完整的问题过程,适当的切分为若干个相互联系的子问题,每次在求解一个子问题,则对应一个阶段,整个问题的求解转化为按照阶段次序去求解。
|
||||
**阶段**:对于一个完整的问题过程,适当的切分为若干个相互联系的子问题,每次在求解一个子问题,则对应一个阶段,整个问题的求解转化为按照阶段次序去求解。
|
||||
|
||||
**状态:**状态表示每个阶段开始时所处的客观条件,即在求解子问题时的已知条件。状态描述了研究的问题过程中的状况。
|
||||
**状态**:状态表示每个阶段开始时所处的客观条件,即在求解子问题时的已知条件。状态描述了研究的问题过程中的状况。
|
||||
|
||||
**决策:**决策表示当求解过程处于某一阶段的某一状态时,可以根据当前条件作出不同的选择,从而确定下一个阶段的状态,这种选择称为决策。
|
||||
**决策**:决策表示当求解过程处于某一阶段的某一状态时,可以根据当前条件作出不同的选择,从而确定下一个阶段的状态,这种选择称为决策。
|
||||
|
||||
**策略:**由所有阶段的决策组成的决策序列称为全过程策略,简称策略。
|
||||
**策略**:由所有阶段的决策组成的决策序列称为全过程策略,简称策略。
|
||||
|
||||
**最优策略:**在所有的策略中,找到代价最小,性能最优的策略,此策略称为最优策略。
|
||||
**最优策略**:在所有的策略中,找到代价最小,性能最优的策略,此策略称为最优策略。
|
||||
|
||||
**状态转移方程:**状态转移方程是确定两个相邻阶段状态的演变过程,描述了状态之间是如何演变的。
|
||||
**状态转移方程**:状态转移方程是确定两个相邻阶段状态的演变过程,描述了状态之间是如何演变的。
|
||||
|
||||
### 2 使用场景
|
||||
|
||||
@ -134,7 +138,7 @@ class Solution {
|
||||
|
||||
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
|
||||
|
||||
**注意:**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
|
||||
**注意**:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
|
||||
|
||||
**示例 1:**
|
||||
|
||||
@ -286,7 +290,4 @@ class Solution {
|
||||
|
||||
|
||||
|
||||
###
|
||||
|
||||
|
||||
|
||||
![](https://bucket-1257126549.cos.ap-guangzhou.myqcloud.com/blog/fz0rq.png)
|
@ -2,23 +2,27 @@
|
||||
|
||||
# 浅谈什么是动态规划以及相关的「股票」算法题
|
||||
|
||||
> 本文首发于公众号「五分钟学算法」,是[图解 LeetCode ](<https://github.com/MisterBooo/LeetCodeAnimation>)系列文章之一。
|
||||
>
|
||||
> 个人网站:[https://www.cxyxiaowu.com](https://www.cxyxiaowu.com)
|
||||
|
||||
## 动态规划
|
||||
|
||||
### 1 概念
|
||||
|
||||
**动态规划**算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。在学习动态规划之前需要明确掌握几个重要概念。
|
||||
|
||||
**阶段:**对于一个完整的问题过程,适当的切分为若干个相互联系的子问题,每次在求解一个子问题,则对应一个阶段,整个问题的求解转化为按照阶段次序去求解。
|
||||
**阶段**:对于一个完整的问题过程,适当的切分为若干个相互联系的子问题,每次在求解一个子问题,则对应一个阶段,整个问题的求解转化为按照阶段次序去求解。
|
||||
|
||||
**状态:**状态表示每个阶段开始时所处的客观条件,即在求解子问题时的已知条件。状态描述了研究的问题过程中的状况。
|
||||
**状态**:状态表示每个阶段开始时所处的客观条件,即在求解子问题时的已知条件。状态描述了研究的问题过程中的状况。
|
||||
|
||||
**决策:**决策表示当求解过程处于某一阶段的某一状态时,可以根据当前条件作出不同的选择,从而确定下一个阶段的状态,这种选择称为决策。
|
||||
**决策**:决策表示当求解过程处于某一阶段的某一状态时,可以根据当前条件作出不同的选择,从而确定下一个阶段的状态,这种选择称为决策。
|
||||
|
||||
**策略:**由所有阶段的决策组成的决策序列称为全过程策略,简称策略。
|
||||
**策略**:由所有阶段的决策组成的决策序列称为全过程策略,简称策略。
|
||||
|
||||
**最优策略:**在所有的策略中,找到代价最小,性能最优的策略,此策略称为最优策略。
|
||||
**最优策略**:在所有的策略中,找到代价最小,性能最优的策略,此策略称为最优策略。
|
||||
|
||||
**状态转移方程:**状态转移方程是确定两个相邻阶段状态的演变过程,描述了状态之间是如何演变的。
|
||||
**状态转移方程**:状态转移方程是确定两个相邻阶段状态的演变过程,描述了状态之间是如何演变的。
|
||||
|
||||
### 2 使用场景
|
||||
|
||||
@ -97,14 +101,14 @@
|
||||
|
||||
所以我们只要考虑当天买和之前买哪个收益更高,当天卖和之前卖哪个收益更高。
|
||||
|
||||
* buy = max(buy, -price[i]) (注意:根据定义 buy 是负数)
|
||||
* sell = max(sell, prices[i] + buy)
|
||||
- buy = max(buy, -price[i]) (注意:根据定义 buy 是负数)
|
||||
- sell = max(sell, prices[i] + buy)
|
||||
|
||||
#### 边界
|
||||
|
||||
第一天 `buy = -prices[0]`, `sell = 0`,最后返回 sell 即可。
|
||||
|
||||
###代码实现
|
||||
### 代码实现
|
||||
|
||||
```java
|
||||
class Solution {
|
||||
@ -134,7 +138,7 @@ class Solution {
|
||||
|
||||
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
|
||||
|
||||
**注意:**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
|
||||
**注意**:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
|
||||
|
||||
**示例 1:**
|
||||
|
||||
@ -257,11 +261,10 @@ class Solution {
|
||||
|
||||
#### 边界
|
||||
|
||||
* 一开始 `fstBuy = -prices[0]`
|
||||
|
||||
* 买入后直接卖出,`fstSell = 0`
|
||||
* 买入后再卖出再买入,`secBuy - prices[0]`
|
||||
* 买入后再卖出再买入再卖出,`secSell = 0`
|
||||
- 一开始 `fstBuy = -prices[0]`
|
||||
- 买入后直接卖出,`fstSell = 0`
|
||||
- 买入后再卖出再买入,`secBuy - prices[0]`
|
||||
- 买入后再卖出再买入再卖出,`secSell = 0`
|
||||
|
||||
最后返回 secSell 。
|
||||
|
||||
@ -286,7 +289,7 @@ class Solution {
|
||||
|
||||
|
||||
|
||||
###
|
||||
![](https://bucket-1257126549.cos.ap-guangzhou.myqcloud.com/blog/fz0rq.png)
|
||||
|
||||
|
||||
|
||||
|
@ -2,23 +2,27 @@
|
||||
|
||||
# 浅谈什么是动态规划以及相关的「股票」算法题
|
||||
|
||||
> 本文首发于公众号「五分钟学算法」,是[图解 LeetCode ](<https://github.com/MisterBooo/LeetCodeAnimation>)系列文章之一。
|
||||
>
|
||||
> 个人网站:[https://www.cxyxiaowu.com](https://www.cxyxiaowu.com)
|
||||
|
||||
## 动态规划
|
||||
|
||||
### 1 概念
|
||||
|
||||
**动态规划**算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。在学习动态规划之前需要明确掌握几个重要概念。
|
||||
|
||||
**阶段:**对于一个完整的问题过程,适当的切分为若干个相互联系的子问题,每次在求解一个子问题,则对应一个阶段,整个问题的求解转化为按照阶段次序去求解。
|
||||
**阶段**:对于一个完整的问题过程,适当的切分为若干个相互联系的子问题,每次在求解一个子问题,则对应一个阶段,整个问题的求解转化为按照阶段次序去求解。
|
||||
|
||||
**状态:**状态表示每个阶段开始时所处的客观条件,即在求解子问题时的已知条件。状态描述了研究的问题过程中的状况。
|
||||
**状态**:状态表示每个阶段开始时所处的客观条件,即在求解子问题时的已知条件。状态描述了研究的问题过程中的状况。
|
||||
|
||||
**决策:**决策表示当求解过程处于某一阶段的某一状态时,可以根据当前条件作出不同的选择,从而确定下一个阶段的状态,这种选择称为决策。
|
||||
**决策**:决策表示当求解过程处于某一阶段的某一状态时,可以根据当前条件作出不同的选择,从而确定下一个阶段的状态,这种选择称为决策。
|
||||
|
||||
**策略:**由所有阶段的决策组成的决策序列称为全过程策略,简称策略。
|
||||
**策略**:由所有阶段的决策组成的决策序列称为全过程策略,简称策略。
|
||||
|
||||
**最优策略:**在所有的策略中,找到代价最小,性能最优的策略,此策略称为最优策略。
|
||||
**最优策略**:在所有的策略中,找到代价最小,性能最优的策略,此策略称为最优策略。
|
||||
|
||||
**状态转移方程:**状态转移方程是确定两个相邻阶段状态的演变过程,描述了状态之间是如何演变的。
|
||||
**状态转移方程**:状态转移方程是确定两个相邻阶段状态的演变过程,描述了状态之间是如何演变的。
|
||||
|
||||
### 2 使用场景
|
||||
|
||||
@ -97,14 +101,14 @@
|
||||
|
||||
所以我们只要考虑当天买和之前买哪个收益更高,当天卖和之前卖哪个收益更高。
|
||||
|
||||
* buy = max(buy, -price[i]) (注意:根据定义 buy 是负数)
|
||||
* sell = max(sell, prices[i] + buy)
|
||||
- buy = max(buy, -price[i]) (注意:根据定义 buy 是负数)
|
||||
- sell = max(sell, prices[i] + buy)
|
||||
|
||||
#### 边界
|
||||
|
||||
第一天 `buy = -prices[0]`, `sell = 0`,最后返回 sell 即可。
|
||||
|
||||
###代码实现
|
||||
### 代码实现
|
||||
|
||||
```java
|
||||
class Solution {
|
||||
@ -134,7 +138,7 @@ class Solution {
|
||||
|
||||
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
|
||||
|
||||
**注意:**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
|
||||
**注意**:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
|
||||
|
||||
**示例 1:**
|
||||
|
||||
@ -257,11 +261,10 @@ class Solution {
|
||||
|
||||
#### 边界
|
||||
|
||||
* 一开始 `fstBuy = -prices[0]`
|
||||
|
||||
* 买入后直接卖出,`fstSell = 0`
|
||||
* 买入后再卖出再买入,`secBuy - prices[0]`
|
||||
* 买入后再卖出再买入再卖出,`secSell = 0`
|
||||
- 一开始 `fstBuy = -prices[0]`
|
||||
- 买入后直接卖出,`fstSell = 0`
|
||||
- 买入后再卖出再买入,`secBuy - prices[0]`
|
||||
- 买入后再卖出再买入再卖出,`secSell = 0`
|
||||
|
||||
最后返回 secSell 。
|
||||
|
||||
@ -286,7 +289,7 @@ class Solution {
|
||||
|
||||
|
||||
|
||||
###
|
||||
![](https://bucket-1257126549.cos.ap-guangzhou.myqcloud.com/blog/fz0rq.png)
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user