class Solution:
"""
123. 买卖股票的最佳时机 III
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
"""
def maxProfit(self, prices: List[int]) -> int:
# 思路:重点理解最多可以完成两笔交易,将数组切分两段处理;
# 遍历每个分界点,分别求左侧最大利润和右侧最大利润
# 1. 初始化
n = len(prices)
# 记录左区间从历史最低价格到第i天卖出的最大利润
left = [0]*n
# 记录右区间第i天买入到最高价格卖出的最大利润
right = [0]*n
minPrice = prices[0]
maxPrice = prices[n-1]
ans = 0
# 2. 遍历左侧区间,参考第121题,每次更新最低价格,并更新最低价格到第i天之间最大利润
for i in range(1, n):
# 易错点
# left[i] = max(0, prices[i]-minPrice)
left[i] = max(left[i-1], prices[i]-minPrice)
minPrice = min(prices[i], minPrice)
# 3. 遍历右侧区间,每次更新最高价格,并更新最高价格到第i天之间最大利润
for i in range(n-2, -1, -1):
# right[i] = max(maxPrice-prices[i], 0)
right[i] = max(maxPrice-prices[i], right[i+1])
maxPrice = max(maxPrice, prices[i])
# 4. 计算两笔交易和的最大值
for i in range(n):
ans = max(left[i] + right[i], ans)
# 5. 返回结果值
return ans
leetcode第123题python版买卖股票的最佳时机III两区间法
最新推荐文章于 2024-07-19 09:18:06 发布