मान लीजिए हमारे पास prices नाम की संख्याओं की एक सूची है और यह एक कंपनी के स्टॉक की कीमतों को कालानुक्रमिक क्रम में दर्शाती है, हमें अधिकतम दो बार उस स्टॉक को खरीदने और बेचने से अधिकतम लाभ ढूंढना है। हमें पहले खरीदना होगा फिर बेचना होगा।
इसलिए, यदि इनपुट इस तरह है prices = [2, 6, 3, 4, 2, 9], तो आउटपुट 11 होगा, क्योंकि हम कीमत 2 पर खरीद सकते हैं, फिर 6 पर बेच सकते हैं, फिर 2 पर खरीद सकते हैं, और 9 पर बेच सकते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- first_buy := -inf, first_sell := -inf
- second_buy := -inf, second_sell := -inf
- प्रत्येक px के लिए prices में, करें
- first_buy := first_buy और -px का अधिकतम
- first_sell := first_sell और (first_buy + px) का अधिकतम
- second_buy := second_buy और (first_sell - px) का अधिकतम
- second_sell := second_sell और (second_buy + px) का अधिकतम
- 0, first_sell और second_sell का अधिकतम लौटाएं
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
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