Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 2261538

Browse files
Update 0309.最佳买卖股票时机含冷冻期.md
1 parent 3b3d9c4 commit 2261538

File tree

1 file changed

+36
-8
lines changed

1 file changed

+36
-8
lines changed

‎problems/0309.最佳买卖股票时机含冷冻期.md‎

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -248,23 +248,51 @@ class Solution {
248248
```
249249

250250
Python:
251-
251+
版本一
252252
```python
253+
from typing import List
254+
253255
class Solution:
254256
def maxProfit(self, prices: List[int]) -> int:
255257
n = len(prices)
256258
if n == 0:
257259
return 0
258-
dp = [[0] * 4 for _ in range(n)]
259-
dp[0][0] = -prices[0] #持股票
260+
dp = [[0] * 4 for _ in range(n)]# 创建动态规划数组,4个状态分别表示持有股票、不持有股票且处于冷冻期、不持有股票且不处于冷冻期、不持有股票且当天卖出后处于冷冻期
261+
dp[0][0] = -prices[0] # 初始状态:第一天持有股票的最大利润为买入股票的价格
260262
for i in range(1, n):
261-
dp[i][0] = max(dp[i-1][0], max(dp[i-1][3], dp[i-1][1]) - prices[i])
262-
dp[i][1] = max(dp[i-1][1], dp[i-1][3])
263-
dp[i][2] = dp[i-1][0] + prices[i]
264-
dp[i][3] = dp[i-1][2]
265-
return max(dp[n-1][3], dp[n-1][1], dp[n-1][2])
263+
dp[i][0] = max(dp[i-1][0], max(dp[i-1][3], dp[i-1][1]) - prices[i]) # 当前持有股票的最大利润等于前一天持有股票的最大利润或者前一天不持有股票且不处于冷冻期的最大利润减去当前股票的价格
264+
dp[i][1] = max(dp[i-1][1], dp[i-1][3]) # 当前不持有股票且处于冷冻期的最大利润等于前一天持有股票的最大利润加上当前股票的价格
265+
dp[i][2] = dp[i-1][0] + prices[i] # 当前不持有股票且不处于冷冻期的最大利润等于前一天不持有股票的最大利润或者前一天处于冷冻期的最大利润
266+
dp[i][3] = dp[i-1][2] # 当前不持有股票且当天卖出后处于冷冻期的最大利润等于前一天不持有股票且不处于冷冻期的最大利润
267+
return max(dp[n-1][3], dp[n-1][1], dp[n-1][2]) # 返回最后一天不持有股票的最大利润
268+
266269
```
270+
版本二
271+
```python
272+
class Solution:
273+
def maxProfit(self, prices: List[int]) -> int:
274+
n = len(prices)
275+
if n < 2:
276+
return 0
277+
278+
# 定义三种状态的动态规划数组
279+
dp = [[0] * 3 for _ in range(n)]
280+
dp[0][0] = -prices[0] # 持有股票的最大利润
281+
dp[0][1] = 0 # 不持有股票,且处于冷冻期的最大利润
282+
dp[0][2] = 0 # 不持有股票,不处于冷冻期的最大利润
283+
284+
for i in range(1, n):
285+
# 当前持有股票的最大利润等于前一天持有股票的最大利润或者前一天不持有股票且不处于冷冻期的最大利润减去当前股票的价格
286+
dp[i][0] = max(dp[i-1][0], dp[i-1][2] - prices[i])
287+
# 当前不持有股票且处于冷冻期的最大利润等于前一天持有股票的最大利润加上当前股票的价格
288+
dp[i][1] = dp[i-1][0] + prices[i]
289+
# 当前不持有股票且不处于冷冻期的最大利润等于前一天不持有股票的最大利润或者前一天处于冷冻期的最大利润
290+
dp[i][2] = max(dp[i-1][2], dp[i-1][1])
291+
292+
# 返回最后一天不持有股票的最大利润
293+
return max(dp[-1][1], dp[-1][2])
267294

295+
```
268296
Go:
269297
```go
270298
// 最佳买卖股票时机含冷冻期 动态规划

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /