📜  leetcode 122 best stock 2 - 任意(1)

📅  最后修改于: 2023-12-03 15:32:38.138000             🧑  作者: Mango

LeetCode 122 - Best Time to Buy and Sell Stock II

介绍

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
总结

这个问题的解法与一次交易的题目相比更加简单,因为我们可以贪心地想,只要有收益我们就交易,否则不交易。需要注意的是,对于空仓情况需要额外特判,因为在这种情况下是不能赚钱的。