ধরা যাক একটি কোম্পানির স্টক প্রাইসের লিস্ট ক্রোনোলজিকল অর্ডারে দেওয়া আছে। আমাদের সেই স্টক কেনা-বেচা করে সর্বাধিক লাভ বের করতে হবে। শর্তগুলো: কেনার আগে অবশ্যই কেনা লাগবে, এবং বিক্রি করার পর কেনার জন্য এক দিন অপেক্ষা করতে হবে (cooldown period)।
উদাহরণ
ইনপুট: prices = [2, 6, 9, 4, 11]
আউটপুট: 11
ব্যাখ্যা: ২-এ কিনে ৬-এ বিক্রি, এক দিন অপেক্ষা, ৪-এ কিনে ১১-এ বিক্রি। মোট লাভ ১১।
সমাধানের ধাপসমূহ
s := 0(স্টক না থাকার অবস্থার সর্বাধিক লাভ)b := -infinity(স্টক থাকার অবস্থার সর্বাধিক লাভ)i = 0থেকেlen(prices)-1পর্যন্ত লুপ চালান:temp := bb := max(b, s - prices[i])- যদি
i != 0হয়, তবেs := max(s, temp + prices[i-1])
max(s, b + prices[-1])ফেরত দিন
পাইথন ইমপ্লিমেন্টেশন
class Solution:
def solve(self, prices):
s = 0
b = float("-inf")
for i in range(len(prices)):
temp = b
b = max(b, s - prices[i])
if i:
s = max(s, temp + prices[i - 1])
return max(s, b + prices[-1])
ob = Solution()
prices = [2, 6, 9, 4, 11]
print(ob.solve(prices))
ইনপুট
[2, 6, 9, 4, 11]
আউটপুট
11