สมมติว่าเรามีรายการราคาหุ้นของบริษัทตามลำดับเวลา และยังมีค่าธรรมเนียมการทำธุรกรรมสำหรับธุรกรรมการขายครั้งเดียว เราต้องหากำไรสูงสุดที่เราสามารถทำได้จากการซื้อและขายหุ้นนั้นหลายครั้ง เราต้องซื้อก่อนถึงจะขายได้
ดังนั้น หากอินพุตเหมือนกับราคา =[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