Python程序:如何在买卖股票时计算最大利润(含交易费用)?


假设我们有一个按时间顺序排列的公司股票价格列表,以及每次出售交易的交易费用。我们需要找到通过多次买卖该股票所能获得的最大利润。在出售之前必须先买入。

因此,如果输入类似于 prices = [2, 10, 4, 8] fee = 3,则输出将为 6,因为我们可以在价格 2 买入并在价格 10 出售,并产生 3 的费用,因此利润为 5。然后我们以价格 4 买入并在价格 8 出售,并产生 3 的费用,因此利润为 1,总利润为 6。

为了解决这个问题,我们将遵循以下步骤

  • n := prices 的大小

  • 定义一个函数 recur()。它将采用 i:= 0 和 flag := 0

  • 如果 i 等于 n,则

    • 返回 0

  • 如果 flag 为假,则

    • 返回 recur(i + 1, 1) - prices[i] 和 recur(i + 1, 0) 的最大值

  • 返回 recur(i + 1, 1) 和 recur(i + 1, 0) + prices[i] - fee 的最大值

  • 从主方法调用 recur()

让我们看看以下实现以更好地理解

示例

 实时演示

class Solution:
   def solve(self, prices, fee):
      n = len(prices)

      def recur(i=0, flag=0):
         if i == n:
            return 0
         if not flag:
            return max(recur(i + 1, 1) - prices[i], recur(i + 1, 0))
         return max(recur(i + 1, 1), recur(i + 1, 0) + prices[i] - fee)

      return recur()

ob = Solution()
prices = [2, 10, 4, 8]
fee = 3
print(ob.solve(prices, fee))

输入

[2, 10, 4, 8], 3

输出

6

更新于: 2020年11月10日

132 次查看

开启你的 职业生涯

完成课程获得认证

开始学习
广告