Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหากำไรสูงสุดที่เราสามารถทำได้โดยการซื้อและขายหุ้นที่มีค่าธรรมเนียมใน Python?


สมมติว่าเรามีรายการราคาหุ้นของบริษัทตามลำดับเวลา และยังมีค่าธรรมเนียมการทำธุรกรรมสำหรับธุรกรรมการขายครั้งเดียว เราต้องหากำไรสูงสุดที่เราสามารถทำได้จากการซื้อและขายหุ้นนั้นหลายครั้ง เราต้องซื้อก่อนถึงจะขายได้

ดังนั้น หากอินพุตเหมือนกับราคา =[2, 10, 4, 8] ค่าธรรมเนียม =3 แล้วผลลัพธ์จะเป็น 6 เนื่องจากเราสามารถซื้อที่ 2 และขายที่ 10 และมีค่าธรรมเนียม 3 ดังนั้นกำไรคือ 5 จากนั้นเราซื้อที่ 4 และขายที่ 8 และเสียค่าธรรมเนียม 3 ดังนั้นกำไร 1 กำไรทั้งหมด 6.

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:

  • n :=ขนาดของราคา

  • กำหนดฟังก์ชัน recur() นี่จะใช้เวลา i:=0 และแฟล็ก :=0

  • ถ้าฉันเหมือนกับ n แล้ว

    • คืนค่า 0

  • ถ้าแฟล็กเป็นเท็จ

    • ผลตอบแทนสูงสุด recur(i + 1, 1) - ราคา[i] และ recur(i + 1, 0)

  • ผลตอบแทนสูงสุดของการเกิดซ้ำ (i + 1, 1) และการเกิดซ้ำ (i + 1, 0) + ราคา[i] - ค่าธรรมเนียม

  • จากการเรียกเมธอดหลัก 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