मान लीजिए हमारे पास एक सरणी है जिसके लिए iवां तत्व दिन i पर दिए गए स्टॉक की कीमत दर्शाता है। हमें अधिकतम लाभ खोजने के लिए एक एल्गोरिदम तैयार करना है। हम अधिकतम दो लेनदेन पूरे कर सकते हैं। इसलिए यदि दी गई कीमतें [3,3,5,0,1,3,1,4] हैं, तो परिणाम 6 होगा, क्योंकि हम दिन 4 पर खरीदेंगे (कीमत 0), फिर दिन 6 पर बेचेंगे (कीमत 3), तो लाभ 3 - 0 = 3 है। अब दिन 7 पर खरीदें (कीमत 1), और दिन 8 पर बेचें (कीमत 4) तो लाभ 4 - 1 = 3 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे −
n := s का आकार, m := t का आकार। s और t को उनसे पहले खाली स्थान जोड़कर अपडेट करें
आकार (n + 1) x (m + 1) का एक मैट्रिक्स बनाएं
dp[0, 0] := 1 सेट करें, फिर सभी पंक्तियों के 0वें कॉलम के लिए 1 सेट करें
i के लिए range 1 से n तक
j के लिए range 1 से m तक
यदि s[i] = t[j], तो
dp[i, j] := dp[i - 1, j - 1]
dp[i, j] := dp[i, j] + dp[i - 1, j]
dp[n, m] लौटाएं
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें −
class Solution(object): def maxProfit(self, p): if not p: return 0 n = len(p) dp = [0 for i in range(n)] ans = 0 xmin = p[0] for i in range(1,n): xmin = min(xmin,p[i]) dp[i] = max(dp[i],p[i]-xmin) ans = max(ans,dp[i]) xmax = [0 for i in range(n)] xmax[-1] =p[-1] tempp = 0 for i in range(n-2,-1,-1): xmax[i] = max(xmax[i+1],p[i]) xmin = [p[-1],n] for i in range(n-2,-1,-1): tempp = max(tempp,xmax[i+1]-p[i+1]) ans = max(ans,dp[i]+tempp) return ans ob = Solution() print(ob.maxProfit([3,3,5,0,1,3,1,4]))
इनपुट
[3,3,5,0,1,3,1,4]
आउटपुट
6