मान लीजिए कि हमारे पास कालानुक्रमिक क्रम में किसी कंपनी के स्टॉक की कीमतों की एक सूची है, और एक बिक्री लेनदेन के लिए लेनदेन शुल्क भी है। हमें उस स्टॉक को कितनी भी बार खरीदने और बेचने से अधिकतम लाभ प्राप्त करना होगा। हमें इसे बेचने से पहले खरीदना चाहिए।
इसलिए, यदि इनपुट कीमतों की तरह है =[2, 10, 4, 8] शुल्क =3, तो आउटपुट 6 होगा, क्योंकि हम 2 पर खरीद सकते हैं और 10 पर बेच सकते हैं और 3 का शुल्क लगा सकते हैं, इसलिए लाभ 5 है . फिर हम 4 पर खरीदते हैं और 8 पर बेचते हैं और 3 का शुल्क लेते हैं, इसलिए लाभ 1, कुल लाभ 6.
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
-
n :=कीमतों का आकार
-
फ़ंक्शन रिकूर () को परिभाषित करें। इसमें i:=0 और ध्वज :=0
. लगेगा -
अगर मैं n के समान हूं, तो
-
वापसी 0
-
-
अगर झंडा झूठा है, तो
-
अधिकतम वापसी (i + 1, 1) - मूल्य [i] और पुनरावृत्ति (i + 1, 0)
-
-
अधिकतम वापसी (i + 1, 1) और पुनरावृत्ति (i + 1, 0) + मूल्य [i] - शुल्क
-
मुख्य विधि से कॉल रिकूर ()
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें:
उदाहरण
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