309. 最佳买卖股票时机含冷冻期
给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。
设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):
- 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
- 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
示例:
输入: [1,2,3,0,2] 输出: 3 解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]
解题思路:这道题使用动态规划求解。令sell[i]代表在第i天手里没有股票情况下的最大利润,令hold[i]代表在第i天手里有股票情况下的最大利润,则sell[i] = max(sell[i-1],hold[i-1]+prices[i]),hold[i] = max(hold[i-1],(sell[i-2] if i>=2 else 0) -prices[i])。结果返回sell[-1]即可。
Python3代码如下:
class Solution(object):
def maxProfit(self, prices):
"""
:type prices: List[int]
:rtype: int
"""
if not prices:
return 0
sell = [0]*len(prices)
hold = [0]*len(prices)
hold[0] = -prices[0]
for i in range(1,len(prices)):
sell[i] = max(sell[i-1],hold[i-1]+prices[i])
hold[i] = max(hold[i-1],(sell[i-2] if i>=2 else 0) -prices[i])
return sell[-1]