📅  最后修改于: 2023-12-03 15:32:38.138000             🧑  作者: Mango
LeetCode 122,题目要求我们计算买入和卖出股票的最大利润,而在这个问题中你可以进行任意次的交易(买入和卖出算一次交易),只要满足:在你卖出股票的前一天你必须将股票卖出。
与一次交易的题目相比,这个题目允许任意次的交易,因此解题思路也会发生一些变化。在这个问题中,我们可以贪心地考虑,只要有收益我们就交易,否则不交易。
具体而言,我们可以设置一个变量 profit
来记录当前的最大收益,初始值记为 0。接下来,我们依次考虑相邻的两个价格差。若差值为正,说明当前可获得收益,则将此利润累加到 profit
中,否则说明不能赚钱,不进行任何操作。
换句话说,我们需要在每个长度为 2 的子数组 [prices[i], prices[i+1]]
中找到最大的正差值。
下面为这个问题的示例解法:
def max_profit(prices: List[int]) -> int:
# 初始最大收益为 0
profit = 0
# 依次考虑相邻的两个价格差
for i in range(len(prices) - 1):
# 若差值为正,则可以获得收益,累计到 profit 中
if prices[i+1] > prices[i]:
profit += prices[i+1] - prices[i]
# 返回最大收益
return profit
这个问题的解法与一次交易的题目相比更加简单,因为我们可以贪心地想,只要有收益我们就交易,否则不交易。需要注意的是,对于空仓情况需要额外特判,因为在这种情况下是不能赚钱的。