Skip to content

Commit 1c20a18

Browse files
committed
浅谈什么是动态规划以及相关的「股票」算法题
1 parent d207212 commit 1c20a18

3 files changed

+50
-43
lines changed

notes/LeetCode第121号问题:买卖股票的最佳时机.md

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,27 @@
22

33
# 浅谈什么是动态规划以及相关的「股票」算法题
44

5+
> 本文首发于公众号「五分钟学算法」,是[图解 LeetCode ](<https://github.com/MisterBooo/LeetCodeAnimation>)系列文章之一。
6+
>
7+
> 个人网站:[https://www.cxyxiaowu.com](https://www.cxyxiaowu.com)
8+
59
## 动态规划
610

711
### 1 概念
812

913
  **动态规划**算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。在学习动态规划之前需要明确掌握几个重要概念。
1014

11-
  **阶段**对于一个完整的问题过程,适当的切分为若干个相互联系的子问题,每次在求解一个子问题,则对应一个阶段,整个问题的求解转化为按照阶段次序去求解。
15+
  **阶段**对于一个完整的问题过程,适当的切分为若干个相互联系的子问题,每次在求解一个子问题,则对应一个阶段,整个问题的求解转化为按照阶段次序去求解。
1216

13-
  **状态**状态表示每个阶段开始时所处的客观条件,即在求解子问题时的已知条件。状态描述了研究的问题过程中的状况。
17+
  **状态**状态表示每个阶段开始时所处的客观条件,即在求解子问题时的已知条件。状态描述了研究的问题过程中的状况。
1418

15-
  **决策**决策表示当求解过程处于某一阶段的某一状态时,可以根据当前条件作出不同的选择,从而确定下一个阶段的状态,这种选择称为决策。
19+
  **决策**决策表示当求解过程处于某一阶段的某一状态时,可以根据当前条件作出不同的选择,从而确定下一个阶段的状态,这种选择称为决策。
1620

17-
  **策略**由所有阶段的决策组成的决策序列称为全过程策略,简称策略。
21+
  **策略**由所有阶段的决策组成的决策序列称为全过程策略,简称策略。
1822

19-
  **最优策略**在所有的策略中,找到代价最小,性能最优的策略,此策略称为最优策略。
23+
  **最优策略**在所有的策略中,找到代价最小,性能最优的策略,此策略称为最优策略。
2024

21-
  **状态转移方程**状态转移方程是确定两个相邻阶段状态的演变过程,描述了状态之间是如何演变的。
25+
  **状态转移方程**状态转移方程是确定两个相邻阶段状态的演变过程,描述了状态之间是如何演变的。
2226

2327
### 2 使用场景
2428

@@ -134,7 +138,7 @@ class Solution {
134138

135139
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
136140

137-
**注意**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
141+
**注意**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
138142

139143
**示例 1:**
140144

@@ -286,7 +290,4 @@ class Solution {
286290

287291

288292

289-
###
290-
291-
292-
293+
![](https://bucket-1257126549.cos.ap-guangzhou.myqcloud.com/blog/fz0rq.png)

notes/LeetCode第122号问题:买卖股票的最佳时机II.md

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,27 @@
22

33
# 浅谈什么是动态规划以及相关的「股票」算法题
44

5+
> 本文首发于公众号「五分钟学算法」,是[图解 LeetCode ](<https://github.com/MisterBooo/LeetCodeAnimation>)系列文章之一。
6+
>
7+
> 个人网站:[https://www.cxyxiaowu.com](https://www.cxyxiaowu.com)
8+
59
## 动态规划
610

711
### 1 概念
812

913
  **动态规划**算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。在学习动态规划之前需要明确掌握几个重要概念。
1014

11-
  **阶段**对于一个完整的问题过程,适当的切分为若干个相互联系的子问题,每次在求解一个子问题,则对应一个阶段,整个问题的求解转化为按照阶段次序去求解。
15+
  **阶段**对于一个完整的问题过程,适当的切分为若干个相互联系的子问题,每次在求解一个子问题,则对应一个阶段,整个问题的求解转化为按照阶段次序去求解。
1216

13-
  **状态**状态表示每个阶段开始时所处的客观条件,即在求解子问题时的已知条件。状态描述了研究的问题过程中的状况。
17+
  **状态**状态表示每个阶段开始时所处的客观条件,即在求解子问题时的已知条件。状态描述了研究的问题过程中的状况。
1418

15-
  **决策**决策表示当求解过程处于某一阶段的某一状态时,可以根据当前条件作出不同的选择,从而确定下一个阶段的状态,这种选择称为决策。
19+
  **决策**决策表示当求解过程处于某一阶段的某一状态时,可以根据当前条件作出不同的选择,从而确定下一个阶段的状态,这种选择称为决策。
1620

17-
  **策略**由所有阶段的决策组成的决策序列称为全过程策略,简称策略。
21+
  **策略**由所有阶段的决策组成的决策序列称为全过程策略,简称策略。
1822

19-
  **最优策略**在所有的策略中,找到代价最小,性能最优的策略,此策略称为最优策略。
23+
  **最优策略**在所有的策略中,找到代价最小,性能最优的策略,此策略称为最优策略。
2024

21-
  **状态转移方程**状态转移方程是确定两个相邻阶段状态的演变过程,描述了状态之间是如何演变的。
25+
  **状态转移方程**状态转移方程是确定两个相邻阶段状态的演变过程,描述了状态之间是如何演变的。
2226

2327
### 2 使用场景
2428

@@ -97,14 +101,14 @@
97101

98102
所以我们只要考虑当天买和之前买哪个收益更高,当天卖和之前卖哪个收益更高。
99103

100-
* buy = max(buy, -price[i]) (注意:根据定义 buy 是负数)
101-
* sell = max(sell, prices[i] + buy)
104+
- buy = max(buy, -price[i]) (注意:根据定义 buy 是负数)
105+
- sell = max(sell, prices[i] + buy)
102106

103107
#### 边界
104108

105109
第一天 `buy = -prices[0]`, `sell = 0`,最后返回 sell 即可。
106110

107-
###代码实现
111+
### 代码实现
108112

109113
```java
110114
class Solution {
@@ -134,7 +138,7 @@ class Solution {
134138

135139
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
136140

137-
**注意**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
141+
**注意**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
138142

139143
**示例 1:**
140144

@@ -257,11 +261,10 @@ class Solution {
257261

258262
#### 边界
259263

260-
* 一开始 `fstBuy = -prices[0]`
261-
262-
* 买入后直接卖出,`fstSell = 0`
263-
* 买入后再卖出再买入,`secBuy - prices[0]`
264-
* 买入后再卖出再买入再卖出,`secSell = 0`
264+
- 一开始 `fstBuy = -prices[0]`
265+
- 买入后直接卖出,`fstSell = 0`
266+
- 买入后再卖出再买入,`secBuy - prices[0]`
267+
- 买入后再卖出再买入再卖出,`secSell = 0`
265268

266269
最后返回 secSell 。
267270

@@ -286,7 +289,7 @@ class Solution {
286289

287290

288291

289-
###
292+
![](https://bucket-1257126549.cos.ap-guangzhou.myqcloud.com/blog/fz0rq.png)
290293

291294

292295

notes/LeetCode第123号问题:买卖股票的最佳时机III.md

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,27 @@
22

33
# 浅谈什么是动态规划以及相关的「股票」算法题
44

5+
> 本文首发于公众号「五分钟学算法」,是[图解 LeetCode ](<https://github.com/MisterBooo/LeetCodeAnimation>)系列文章之一。
6+
>
7+
> 个人网站:[https://www.cxyxiaowu.com](https://www.cxyxiaowu.com)
8+
59
## 动态规划
610

711
### 1 概念
812

913
  **动态规划**算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。在学习动态规划之前需要明确掌握几个重要概念。
1014

11-
  **阶段**对于一个完整的问题过程,适当的切分为若干个相互联系的子问题,每次在求解一个子问题,则对应一个阶段,整个问题的求解转化为按照阶段次序去求解。
15+
  **阶段**对于一个完整的问题过程,适当的切分为若干个相互联系的子问题,每次在求解一个子问题,则对应一个阶段,整个问题的求解转化为按照阶段次序去求解。
1216

13-
  **状态**状态表示每个阶段开始时所处的客观条件,即在求解子问题时的已知条件。状态描述了研究的问题过程中的状况。
17+
  **状态**状态表示每个阶段开始时所处的客观条件,即在求解子问题时的已知条件。状态描述了研究的问题过程中的状况。
1418

15-
  **决策**决策表示当求解过程处于某一阶段的某一状态时,可以根据当前条件作出不同的选择,从而确定下一个阶段的状态,这种选择称为决策。
19+
  **决策**决策表示当求解过程处于某一阶段的某一状态时,可以根据当前条件作出不同的选择,从而确定下一个阶段的状态,这种选择称为决策。
1620

17-
  **策略**由所有阶段的决策组成的决策序列称为全过程策略,简称策略。
21+
  **策略**由所有阶段的决策组成的决策序列称为全过程策略,简称策略。
1822

19-
  **最优策略**在所有的策略中,找到代价最小,性能最优的策略,此策略称为最优策略。
23+
  **最优策略**在所有的策略中,找到代价最小,性能最优的策略,此策略称为最优策略。
2024

21-
  **状态转移方程**状态转移方程是确定两个相邻阶段状态的演变过程,描述了状态之间是如何演变的。
25+
  **状态转移方程**状态转移方程是确定两个相邻阶段状态的演变过程,描述了状态之间是如何演变的。
2226

2327
### 2 使用场景
2428

@@ -97,14 +101,14 @@
97101

98102
所以我们只要考虑当天买和之前买哪个收益更高,当天卖和之前卖哪个收益更高。
99103

100-
* buy = max(buy, -price[i]) (注意:根据定义 buy 是负数)
101-
* sell = max(sell, prices[i] + buy)
104+
- buy = max(buy, -price[i]) (注意:根据定义 buy 是负数)
105+
- sell = max(sell, prices[i] + buy)
102106

103107
#### 边界
104108

105109
第一天 `buy = -prices[0]`, `sell = 0`,最后返回 sell 即可。
106110

107-
###代码实现
111+
### 代码实现
108112

109113
```java
110114
class Solution {
@@ -134,7 +138,7 @@ class Solution {
134138

135139
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
136140

137-
**注意**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
141+
**注意**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
138142

139143
**示例 1:**
140144

@@ -257,11 +261,10 @@ class Solution {
257261

258262
#### 边界
259263

260-
* 一开始 `fstBuy = -prices[0]`
261-
262-
* 买入后直接卖出,`fstSell = 0`
263-
* 买入后再卖出再买入,`secBuy - prices[0]`
264-
* 买入后再卖出再买入再卖出,`secSell = 0`
264+
- 一开始 `fstBuy = -prices[0]`
265+
- 买入后直接卖出,`fstSell = 0`
266+
- 买入后再卖出再买入,`secBuy - prices[0]`
267+
- 买入后再卖出再买入再卖出,`secSell = 0`
265268

266269
最后返回 secSell 。
267270

@@ -286,7 +289,7 @@ class Solution {
286289

287290

288291

289-
###
292+
![](https://bucket-1257126549.cos.ap-guangzhou.myqcloud.com/blog/fz0rq.png)
290293

291294

292295

0 commit comments

Comments
 (0)