day54 动态规划part11 代码随想录算法训练营 188. 买卖股票的最佳时机 IV
题目:188. 买卖股票的最佳时机 IV
我的感悟:
- 我真棒!!
理解难点:
- 类比上一道题,
- 掌握不好边界,就代入一个数值来推
- 为什么是2K+1,因为要遍历到下标是[2K]
听课笔记:
我的代码:
class Solution:
def maxProfit(self, k: int, prices: List[int]) -> int:
if len(prices)==1: # 这个写不写都能通过
return 0
dp = [[0]* (2*k+1) for _ in range(len(prices))]
# 初始化,奇数为买入,所以现金为负数
for j in range(1,2*k+1,2): # 从1,开始
dp[0][j] = 0-prices[0] #
# 奇数买,偶数卖
# 类比
# dp[i][1] = max(dp[i-1][1],dp[i-1][0]-prices[i]) # 今天买了
# dp[i][2] = max(dp[i-1][2],dp[i-1][1]+prices[i]) # 今日卖了
for i in range(1,len(prices)):
for j in range(1,2*k,2):
# j=1
dp[i][j] = max(dp[i-1][j],dp[i-1][j-1]-prices[i])
dp[i][j+1] = max(dp[i-1][j+1],dp[i-1][j]+prices[i])
return dp[-1][-1]
通过截图:
老师代码:
扩展写法:
资料:
188.买卖股票的最佳时机IV
本题是123.买卖股票的最佳时机III 的进阶版