Python程序:求解买卖股票最大利润


假设我们按时间顺序获得了一个公司股票价格的列表,我们需要找到通过买卖股票可以获得的最大利润。必须先买入后卖出,并且卖出股票后必须等待一天才能再次买入。

因此,如果输入类似 prices = [2, 6, 9, 4, 11],则输出为 11,因为我们可以以 2 买入,以 6 卖出,等待一天,然后以 4 买入,然后以 11 卖出。

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

  • s := 0

  • b := -∞

  • 对于 i 从 0 到 prices 的大小,执行:

    • temp := b

    • b := max(b, (s - prices[i]))

    • 如果 i 非零,则:

      • s := max(s, (temp + prices[i - 1]))

  • 返回 max(s, (b + prices 的最后一个元素))

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

示例

在线演示

class Solution:
   def solve(self, prices):
      s = 0
      b = float("-inf")
      for i in range(len(prices)):
         temp = b
         b = max(b, s - prices[i])
         if i:
            s = max(s, temp + prices[i - 1])
      return max(s, b + prices[-1])

ob = Solution()
prices = [2, 6, 9, 4, 11]
print(ob.solve(prices))

输入

[2, 6, 9, 4, 11]

输出

11

更新于:2020年11月10日

浏览量:152

开启您的职业生涯

完成课程获得认证

开始学习
广告