Add stock
All checks were successful
ci/woodpecker/push/test Pipeline was successful

This commit is contained in:
2023-02-09 21:34:48 +08:00
parent b8d1550a43
commit 331178cb2c
5 changed files with 62 additions and 0 deletions

View File

@@ -57,6 +57,7 @@
- [基础问题](./dynamic-programming-basic.md)
- [背包问题](./knapsack.md)
- [打家劫舍](./house-robber.md)
- [股票问题](./stock.md)
# STL

18
notes/src/stock.md Normal file
View File

@@ -0,0 +1,18 @@
# 股票问题
## [122. 买卖股票的最佳时机 II](https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/)
- `dp[i][0]` 表示第 i 天持有股票情况下的资产总额,`dp[i][1]` 表示第 i 天没有持有股票情况下的资产总额。这里的资产不包括股票本身的价值,只包括自身的现金,如果你在第 1 天买入了股票,那么你的资产总额是 `-prices[0]`
- 递推公式:
- 我们先来讨论 `dp[i][0]`,也就是第 i 天持有股票时的资产,分两种情况
- 第 i - 1 天持有股票,那么第 i 天的资产就是 `dp[i - 1][0]`
- 第 i - 1 天没持有股票,那么第 i 天的资产就是 `dp[i - 1][1] - prices[i]`
- 取这两者的最大值即为第 i 天的最大资产 `dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i])`
- 同理 `dp[i][1]` 也分两种情况
- 第 i - 1 天持有股票,那么第 i 天的资产就是 `dp[i - 1][0] + prices[0]`
- 第 i - 1 天没持有股票,那么第 i 天的资产就是 `dp[i - 1][1]`
- 取这两者的最大值即为第 i 天的最大资产 `dp[i][1] = max(dp[i - 1][0] + prices[i], dp[i - 1][1])`
- 初始化
- `dp[0][0] = -prices[0]`
- `dp[0][1] = 0`
- 遍历顺序:从前往后