ধরি আমাদের একটি নাম্বার লিস্ট prices আছে যা একটি কোম্পানির স্টক প্রাইস ক্রোনোলজিকাল অর্ডারে রিপ্রেজেন্ট করে। আমাদের সর্বোচ্চ দুবার বায় এবং সেল করে সর্বোচ্চ প্রফিট বের করতে হবে। আগে বায় করতে হবে তারপর সেল।
তাই, ইনপুট যদি prices = [2, 6, 3, 4, 2, 9] হয়, তবে আউটপুট হবে ১১, কারণ ২-এ বায় করে ৬-এ সেল, আবার ২-এ বায় করে ৯-এ সেল করলে প্রফিট ১১ হয়।
সমাধানের ধাপগুলো:
first_buy := -inf,first_sell := -infsecond_buy := -inf,second_sell := -inf- প্রতিটি
pxইনpricesএর জন্য, করুনfirst_buy := max(first_buy, -px)first_sell := max(first_sell, first_buy + px)second_buy := max(second_buy, first_sell - px)second_sell := max(second_sell, second_buy + px)
max(0, first_sell, second_sell)রিটার্ন করুন
বেশি বুঝতে নিচের বাস্তবায়নটি দেখুন:
উদাহরণ
class Solution:
def solve(self, prices):
first_buy = first_sell = float("-inf")
second_buy = second_sell = float("-inf")
for px in prices:
first_buy = max(first_buy, -px)
first_sell = max(first_sell, first_buy + px)
second_buy = max(second_buy, first_sell - px)
second_sell = max(second_sell, second_buy + px)
return max(0, first_sell, second_sell)
ob = Solution()
prices = [2, 6, 3, 4, 2, 9]
print(ob.solve(prices))ইনপুট
[2, 6, 3, 4, 2, 9]
আউটপুট
11