赞
踩
● 123.买卖股票的最佳时机III
● 188.买卖股票的最佳时机IV
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
class Solution:
def maxProfit(self, prices: List[int]) -> int:
dp = [[0] * 5 for _ in range(len(prices))]
dp[0][1] = - prices[0]
dp[0][3] = - prices[0]
for i in range(1,len(prices)):
dp[i][0] = dp[i-1][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]) #第一次卖出
dp[i][3] = max(dp[i-1][3], dp[i-1][2] - prices[i]) #第二次买入
dp[i][4] = max(dp[i-1][4], dp[i-1][3] + prices[i]) #第二次卖出
return dp[-1][4]
给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
思路同上一题一样,共存在2k+1种状态 0为不操作,奇数为买入,偶数为卖出
class Solution:
def maxProfit(self, k: int, prices: List[int]) -> int:
dp = [[0] * ( 2 * k + 1) for _ in range(len(prices))]
for i in range(1, 2 * k, 2):
dp[0][i] = - prices[0]
for i in range(1, len(prices)):
for j in range(0, 2*k - 1, 2):
dp[i][j+1] = max(dp[i-1][j+1], dp[i-1][j] - prices[i])
dp[i][j+2] = max(dp[i-1][j+2], dp[i-1][j+1] + prices[i])
return dp[-1][2*k]
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。