मान लीजिए कि हमारे पास कीमतों नामक संख्याओं की एक सूची है और यह कालानुक्रमिक क्रम में किसी कंपनी के स्टॉक की कीमतों का प्रतिनिधित्व कर रही है, तो हमें उस स्टॉक को अधिकतम दो बार खरीदने और बेचने से अधिकतम लाभ प्राप्त करना होगा। हमें पहले खरीदना है फिर बेचना है।
इसलिए, यदि इनपुट कीमतों की तरह है =[2, 6, 3, 4, 2, 9], तो आउटपुट 11 होगा, क्योंकि हम कीमत 2 पर खरीद सकते हैं, फिर 6 पर बेच सकते हैं, फिर से 2 पर खरीद सकते हैं और बेच सकते हैं। 9 बजे.
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- पहले_खरीदें:=-इन्फ़, फ़र्स्ट_सेल:=-इन्फ़
- सेकेंड_बाय:=-इन्फ, सेकेंड_सेल:=-इन्फ
- कीमतों में प्रत्येक px के लिए, करें
- first_buy :=अधिकतम first_buy और -px
- first_sell :=ज्यादा से ज्यादा first_sell और (first_buy + px)
- second_buy :=अधिकतम दूसरा_खरीदें और (first_sell - px)
- सेकेंड_सेल:=सेकेंड_सेल की अधिकतम और (सेकंड_बाय + पीएक्स)
- अधिकतम 0 लौटाएं, पहले_बेचें और दूसरी_बेचें
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution: def solve(self, prices): first_buy = first_sell = float("-inf") second_buy = second_sell = float("-inf") for px in prices: first_buy = max(first_buy, -px) first_sell = max(first_sell, first_buy + px) second_buy = max(second_buy, first_sell - px) second_sell = max(second_sell, second_buy + px) return max(0, first_sell, second_sell) ob = Solution() prices = [2, 6, 3, 4, 2, 9] print(ob.solve(prices))
इनपुट
[2, 6, 3, 4, 2, 9]
आउटपुट
11