ধরুন আমাদের কাছে প্রাইস নামে একটি সংখ্যার তালিকা আছে এবং এটি একটি কোম্পানির স্টক মূল্যকে কালানুক্রমিক ক্রমে উপস্থাপন করছে, আমাদেরকে সেই স্টক কেনা এবং বিক্রি করে সর্বাধিক দুইবার লাভ করতে হবে তা খুঁজে বের করতে হবে। আমাদের আগে কিনতে হবে তারপর বিক্রি করতে হবে।
সুতরাং, ইনপুট যদি দামের মত হয় =[2, 6, 3, 4, 2, 9], তাহলে আউটপুট হবে 11, যেমন আমরা 2 দামে কিনতে পারি, তারপর 6-এ বিক্রি করতে পারি, আবার 2-এ কিনুন এবং বিক্রি করতে পারি। 9 এ।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- first_buy :=-inf, first_sell :=-inf
- second_buy :=-inf, second_sell :=-inf
- প্রতিটি পিক্সের দামের জন্য, করুন
- first_buy :=first_buy এবং -px-এর সর্বাধিক
- first_sell :=first_sell এবং (first_buy + px) সর্বাধিক
- সেকেন্ড_বাই :=সেকেন্ড_বাই এবং (প্রথম_বিক্রয় - পিএক্স)
- সেকেন্ড_সেল :=সর্বাধিক সেকেন্ড_সেল এবং (সেকেন্ড_বাই + পিএক্স)
- সর্বোচ্চ রিটার্ন 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