স্টক প্রাইস লিস্ট nums দেওয়া আছে। প্রতিদিন সর্বোচ্চ এক শেয়ার কিনা যায়, একাধিক শেয়ার হোল্ড করা যায়, যেকোনো দিন যেকোনো সংখ্যক শেয়ার বিক্রি করা যায়। সর্বোচ্চ প্রফিট বের করুন।
ইনপুট উদাহরণ
nums = [3, 4, 7, 3, 5]
আউটপুট: 9
ব্যাখ্যা
- প্রাইস ৩ এবং ৪-এ কিনুন, ৭-এ বিক্রি: (7-3)+(7-4)=7
- প্রাইস ৩-এ কিনুন, ৫-এ বিক্রি: 5-3=2
- মোট প্রফিট = 7+2 = 9
অ্যালগরিদম
ডান থেকে বাম স্ক্যান করুন। সর্বোচ্চ ভবিষ্যৎ প্রাইস (top) ট্র্যাক করুন। যদি করেন্ট প্রাইস top-এর চেয়ে ছোট হয়, তবে top - current প্রফিট যোগ করুন।
পাইথন কোড
def solve(nums):
ans = 0
while nums:
top = nums.pop()
while nums and top > nums[-1]:
ans += top - nums.pop()
return ans
# টেস্ট
print(solve([3, 4, 7, 3, 5])) # 9
ব্যাখ্যা
গ্রিডি অ্যালগরিদম: প্রতিটি লোকাল মিনিমাম থেকে পরবর্তী গ্লোবাল ম্যাক্সিমামে বেচে দাও। সময় জটিলতা O(n) কারণ প্রতিটি উপাদান একবার পপ হয়।