LeetCode 123. 买卖股票的最佳时机 III
题目链接:123. 买卖股票的最佳时机 III - 力扣(LeetCode)
这个道题和121. 买卖股票的最佳时机 I、122. 买卖股票的最佳时机 II很像,是两题的结合。
我们就定义两个数组来实现。
代码:
#python #DP
class Solution:
def maxProfit(self, prices: List[int]) -> int:
n = len(prices)
buy1 = buy2 = - prices[0] //卖两次,从定义出发,定义两个阶段的买和卖
sell1 = sell2 = 0
for i in range(1, n):
buy1 = max(buy1, - prices[i])
sell1 = max(sell1, buy1 + prices[i])
buy2 = max(buy2, sell1 - prices[i]) //仔细体会上一题的这个位置
sell2 = max(sell2, buy2 + prices[i])
return sell2
LeetCode 188. 买股票的最佳时机IV
题目链接:188. 买卖股票的最佳时机 IV - 力扣(LeetCode)
这又是上一题的一个进阶版,其实我们上一题考虑了两个,这次直接来一个DP数组就OK。
代码:
#python
class Solution:
def maxProfit(self, k: int, prices: List[int]) -> int:
n = len(prices)
buy = [-float('inf')] * (k + 1)
sell = [0] * (k + 1) #SELL数组
for price in prices:
for i in range(1, k + 1):
buy[i] = max(buy[i], sell[i - 1] - price)
sell[i] = max(sell[i], buy[i] + price)
return sell[k]