मान लीजिए हमारे पास nums नाम की संख्याओं की एक सूची है जो एक कंपनी के स्टॉक की कीमतों को कालानुक्रमिक क्रम में दर्शाती है और हमारे पास एक अन्य मान k भी है, हमें अधिकतम k खरीद और बिक्री से अधिकतम लाभ ढूंढना है (हमें बेचने से पहले खरीदना होगा, और खरीदने से पहले बेचना होगा)।
इसलिए, यदि इनपुट इस तरह है prices = [7, 3, 5, 2, 3] k = 2, तो आउटपुट 3 होगा, क्योंकि हम 3 पर खरीद सकते हैं, फिर 5 पर बेच सकते हैं, फिर 2 पर खरीद सकते हैं, और 3 पर बेच सकते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- dp() फ़ंक्शन परिभाषित करें। यह i, k, bought लेगा
- यदि i, prices के आकार के समान है या k, 0 के समान है, तो
- 0 लौटाएं
- यदि bought सत्य है, तो
- (dp(i+1, k-1, False) + prices[i]) और dp(i+1, k, bought) का अधिकतम लौटाएं
- अन्यथा,
- (dp(i+1, k, True) - prices[i]) और dp(i + 1, k, bought) का अधिकतम लौटाएं
- मुख्य मेथड से dp(0, k, False) को कॉल करें और परिणाम लौटाएं
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution:
def solve(self, prices, k):
def dp(i, k, bought):
if i == len(prices) or k == 0:
return 0
if bought:
return max(dp(i + 1, k - 1, False) + prices[i], dp(i + 1, k, bought))
else:
return max(dp(i + 1, k, True) - prices[i], dp(i + 1, k, bought))
return dp(0, k, False)
ob = Solution()
prices = [7, 3, 5, 2, 3]
k = 2
print(ob.solve(prices, k))इनपुट
[7, 3, 5, 2, 3], 2
आउटपुट
3