📌  相关文章
📜  通过根据每天给定的价格交易股票来最大化利润(1)

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

通过根据每天给定的价格交易股票来最大化利润

介绍

这个问题是一个经典的股票买卖问题,题目描述如下:

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

你可以对这个股票进行任意次数的交易(即买入和卖出股票),但是必须遵循以下规则:

  • 不能同时持有多张股票(即一次买入后必须先卖出才能再次买入)。
  • 买入股票时,需要一定的手续费,手续费为固定值,但当天卖出的股票可以不用手续费。

设计一个函数,计算你所能获得的最大利润。

思路

这个问题可以使用贪心算法来解决。记录买入股票的最低价格和最高卖出股票的最高价格。只要卖出价格比买入价格高加上手续费,就可以卖出。

代码
def max_profit(prices: List[int], fee: int) -> int:
    if not prices:
        return 0
    n = len(prices)
    buy = prices[0] + fee
    profit = 0
    for i in range(1, n):
        if prices[i] + fee < buy:
            buy = prices[i] + fee
        elif prices[i] > buy:
            profit += prices[i] - buy
            buy = prices[i]
    return profit
复杂度分析

时间复杂度:O(n),只需要遍历一次数组。

空间复杂度:O(1),只使用了常量级别的额外变量。