কম্পিউটার টিউটোরিয়াল

পাইথনে সেরা সময় বাই এবং সেল স্টক III


ধরুন একটি অ্যারে আছে যার i-তম এলিমেন্ট i-তম দিনে একটি স্টকের দাম নির্দেশ করে। আমাদের সর্বোচ্চ প্রফিট বের করতে হবে। আমরা সর্বোচ্চ দুটি ট্রানজ্যাকশন সম্পন্ন করতে পারি। উদাহরণ: prices = [3,3,5,0,1,3,1,4] হলে রেজাল্ট ৬, কারণ ৪র্থ দিনে কিনে (দাম ০) ৬ষ্ঠ দিনে বিক্রি (দাম ৩) → প্রফিট ৩। আবার ৭ম দিনে কিনে (দাম ১) ৮ম দিনে বিক্রি (দাম ৪) → প্রফিট ৩।

সমাধানের ধাপগুলো −

  • n := len(p); dp অ্যারে তৈরি করুন; ans = 0; xmin = p[0]
  • i = 1 থেকে n-1 পর্যন্ত − xmin = min(xmin, p[i]); dp[i] = max(dp[i], p[i]-xmin); ans = max(ans, dp[i])
  • xmax অ্যারে তৈরি করুন; xmax[-1] = p[-1]; tempp = 0
  • i = n-2 থেকে 0 পর্যন্ত − xmax[i] = max(xmax[i+1], p[i])
  • i = n-2 থেকে 0 পর্যন্ত − tempp = max(tempp, xmax[i+1]-p[i+1]); ans = max(ans, dp[i]+tempp)
  • ans রিটার্ন করুন

উদাহরণ

নিচের ইমপ্লিমেন্টেশনটি দেখুন −

class Solution(object):
    def maxProfit(self, p):
        if not p:
            return 0
        n = len(p)
        dp = [0 for i in range(n)]
        ans = 0
        xmin = p[0]
        for i in range(1,n):
            xmin = min(xmin,p[i])
            dp[i] = max(dp[i],p[i]-xmin)
            ans = max(ans,dp[i])
        xmax = [0 for i in range(n)]
        xmax[-1] = p[-1]
        tempp = 0
        for i in range(n-2,-1,-1):
            xmax[i] = max(xmax[i+1],p[i])
        for i in range(n-2,-1,-1):
            tempp = max(tempp,xmax[i+1]-p[i+1])
            ans = max(ans,dp[i]+tempp)
        return ans

ob = Solution()
print(ob.maxProfit([3,3,5,0,1,3,1,4]))

ইনপুট

[3,3,5,0,1,3,1,4]

আউটপুট

6

  1. ব্যবহৃত অ্যান্ড্রয়েড ফোন কেনা ও বিক্রি করার ৫টি সেরা জায়গা

  2. পাইথনে BST-এর মেডিয়ান O(n) সময় এবং O(1) স্পেসে বের করা

  3. পাইথনে ভেক্টরাইজেশন (Vectorization) – পারফরম্যান্স অপ্টিমাইজেশন

  4. ২০২৪ সালের ক্রেজলিস্টের ১০টি বিশ্বস্ত বিকল্প কেনা ও বেচার জন্য