मान लीजिए कि हमारे पास एक सरणी है जिसके लिए ith तत्व किसी दिए गए स्टॉक की कीमत को दिन 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 सेट करें, 1 डालें
-
मैं के लिए 1 से n की सीमा में
-
j के लिए 1 से m की सीमा में
-
अगर s[i] =t[j], तो
-
डीपी [आई, जे]:=डीपी [i - 1, जे - 1]
-
-
डीपी [i, j]:=dp [i, j] + dp [i – 1, j]
-
-
-
वापसी डीपी [एन, एम]
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
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