ধরুন আমাদের একটি অ্যারে আছে, এখানে A[i] দিন i-এ একটি প্রদত্ত স্টকের দাম নির্দেশ করছে। আমাদের সর্বোচ্চ লাভ খুঁজে বের করতে হবে। আমরা সর্বাধিক একটি লেনদেন সম্পূর্ণ করতে পারি। (লেনদেন মানে স্টক ক্রয়-বিক্রয়)। কিন্তু আমাদের মনে রাখতে হবে যে আমরা একই সময়ে একাধিক লেনদেনে জড়িত নাও হতে পারি। তাই নতুন কেনার আগে আমাদের স্টক বিক্রি করতে হবে।
ধরুন অ্যারেটি A =[7, 1, 5, 3, 6, 4] এর মতো, তাহলে ফলাফলটি 5 হবে। আমরা দেখতে পাচ্ছি, আমরা যদি 2 য় দিনে (সূচী 1) কিনি তবে এটি 1 হিসাবে নিবে। একটি ক্রয় মূল্য। তারপর যদি আমরা ৫ম দিনে বিক্রি করি, লাভ হবে ৬ – ১ =৫।
এটি সমাধান করতে, এই ধাপগুলি অনুসরণ করুন -
- A এর মতই আকারের দুটি অ্যারে লেফটমিন এবং রাইটম্যাক্স তৈরি করুন এবং সেগুলি 0s দিয়ে পূরণ করুন
- leftMin[0] =A[0]
- আমি রেঞ্জ 1 থেকে A – 1 এর দৈর্ঘ্যের জন্য, leftMin[i] =সর্বনিম্ন leftMin[i – 1] এবং A[i]
- rightMax[n-1] =A[n – 1]
- এ - 1 থেকে 1 পর্যন্ত রেঞ্জের দৈর্ঘ্যের i জন্য, rightMax[i] =সর্বাধিক rightMax[i + 1] এবং A[i]
- উত্তর সেট করুন :=0
- আমি 0 থেকে A – 1 এর দৈর্ঘ্যের মধ্যে, উত্তর :=উত্তরের সর্বোচ্চ এবং rightMax[i + 1] – leftMin[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