मान लीजिए हमारे पास एक सरणी A है, यहां A[i] दिन i पर दिए गए स्टॉक की कीमत दर्शाता है। हमें अधिकतम लाभ ढूंढना है। हम अधिकतम एक लेनदेन पूरा कर सकते हैं। (लेनदेन का मतलब स्टॉक खरीदना और बेचना है)। लेकिन हमें ध्यान रखना होगा कि हम एक ही समय में कई लेनदेन में संलग्न नहीं हो सकते। इसलिए हमें नया खरीदने से पहले स्टॉक बेचना होगा।
मान लीजिए सरणी A = [7, 1, 5, 3, 6, 4] जैसी है, तो परिणाम 5 होगा। जैसा कि हम देख सकते हैं, यदि हम दिन 2 (इंडेक्स 1) पर खरीदते हैं, तो यह 1 को खरीद मूल्य के रूप में लेगा। फिर यदि हम दिन 5 पर बेचते हैं, तो लाभ 6 - 1 = 5 होगा।
हल करने के चरण
- A के समान आकार के दो सरणी leftMin, और rightMax बनाएं, और उन्हें 0 से भरें
- leftMin[0] = A[0]
- i को 1 से A की लंबाई - 1 तक रेंज में लिए, leftMin[i] = leftMin[i - 1] और A[i] का न्यूनतम
- rightMax[n-1] = A[n - 1]
- i को A की लंबाई - 1 से 1 तक नीचे रेंज में लिए, rightMax[i] = rightMax[i + 1] और A[i] का अधिकतम
- answer := 0 सेट करें
- i को 0 से A की लंबाई - 1 तक रेंज में लिए, answer := answer और rightMax[i + 1] - leftMin[i] का अधिकतम
- answer वापस करें
बेहतर समझ के लिए कार्यान्वयन देखें:
उदाहरण
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])
rightMax[-1]= prices[-1]
for i in range(len(prices)-2,-1,-1):
rightMax[i] = max(rightMax[i+1],prices[i])
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