मान लीजिए कि हमारे पास एक एरे ए है, यहां ए [i] दिन i पर दिए गए स्टॉक की कीमत का संकेत दे रहा है। हमें अधिकतम लाभ ज्ञात करना है। हम ज़्यादा से ज़्यादा एक लेन-देन पूरा कर सकते हैं. (लेनदेन का मतलब स्टॉक खरीदना और बेचना है)। लेकिन हमें यह ध्यान रखना होगा कि हम एक ही समय में कई लेन-देन नहीं कर सकते हैं। इसलिए हमें नया स्टॉक खरीदने से पहले स्टॉक को बेचना होगा।
मान लीजिए कि एरे ए =[7, 1, 5, 3, 6, 4] की तरह है, तो परिणाम 5 होगा। एक खरीद मूल्य। फिर अगर हम 5 वें दिन बेचते हैं, तो लाभ 6 - 1 =5 होगा।
इसे हल करने के लिए, इन चरणों का पालन करें -
- दो सरणियाँ बनाएँ, बाएँ मिनट, और दाएँ अधिकतम आकार A के समान, और उन्हें 0s से भरें
- बाएं मिनट[0] =ए[0]
- i के लिए 1 से लेकर A-1 की लंबाई तक, लेफ्टमिन [i] =न्यूनतम लेफ्टमिन [i – 1] और A[i]
- rightMax[n-1] =A[n – 1]
- मैं के लिए ए -1 से नीचे 1 की सीमा लंबाई में, दायां मैक्स [i] =अधिकतम दाएं मैक्स [i + 1] और ए [i]
- उत्तर सेट करें:=0
- मैं के लिए 0 से ए -1 की लंबाई में, उत्तर:=अधिकतम उत्तर और दाएं मैक्स [i + 1] - बाएं न्यूनतम [i]
- वापसी का जवाब
आइए बेहतर ढंग से समझने के लिए कार्यान्वयन देखें
उदाहरण
class Solution(object): def maxProfit(self, prices): """ :type prices: List[int] :rtype: int """ if not prices: return 0 leftMin,rightMax = [0 for i in range(len(prices))],[0 for i in range(len(prices))] leftMin[0] = prices[0] for i in range(1,len(prices)): leftMin[i] = min(leftMin[i-1],prices[i]) #print(leftMin) rightMax[-1]= prices[-1] for i in range(len(prices)-2,-1,-1): rightMax[i] = max(rightMax[i+1],prices[i]) #print(rightMax) ans = 0 for i in range(len(prices)-1): ans = max(ans,rightMax[i+1]-leftMin[i]) return ans ob1 = Solution() print(ob1.maxProfit([7,2,5,8,6,3,1,4,5,4,7]))
इनपुट
prices = [7,2,5,8,6,3,1,4,5,4,7]
आउटपुट
6