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 次檢視

開啟你的 職業生涯

完成課程獲得認證

開始學習
廣告