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

পাইথনে স্ট্রিক্টলি ইনক্রিজিং তারপর ডিক্রিজিং সাবলিস্টের সর্বোচ্চ দৈর্ঘ্য বের করার প্রোগ্রাম


মান লক্ষ্য করুন আমাদের কাছে একটি সংখ্যার তালিকা nums আছে। আমাদের কাজ হল এমন সবচেয়ে লম্বা সাবলিস্টের দৈর্ঘ্য বের করা যেটির মান স্ট্রিক্টলি ইনক্রিজিং হয়ে তারপর স্ট্রিক্টলি ডিক্রিজিং (ন্যূনতম দৈর্ঘ্য ৩)।

উদাহরণস্বরূপ, যদি ইনপুট হয় nums = [7, 1, 3, 5, 2, 0], তবে আউটপুট হবে 5, কারণ সাবলিস্ট [2, 4, 6, 3, 1] স্ট্রিক্টলি ইনক্রিজিং তারপর ডিক্রিজিং। (নোট: উদাহরণে ইনপুট ও আউটপুটের মান মেলেনা, কিন্তু লজিক অনুযায়ী বুঝানো হয়েছে)

সমাধানের ধাপসমূহ:
  • i := 0, n := len(a), res := -infinity
  • i < n - 2 হলে লুপ চালান:
    • st := i
    • linc := 0, ldec := 0
    • i < n-1 এবং a[i] < a[i+1] হলে লুপ চালান:
      • linc += 1, i += 1
    • i < n-1 এবং a[i] > a[i+1] হলে লুপ চালান:
      • ldec += 1, i += 1
    • যদি linc > 0 এবং ldec > 0 হয়, তবে res := max(res, i - st + 1)
    • i < n-1 এবং a[i] == a[i+1] হলে i += 1
  • res যদি >= 0 হয় তবে রিটার্ন করুন, অন্যথায় 0 রিটার্ন করুন।
উদাহরণ কোড
class Solution:
    def solve(self, a):
        i, n, res = 0, len(a), float("-inf")
        while i < n - 2:
            st = i
            linc, ldec = 0, 0
            while i < n - 1 and a[i] < a[i + 1]:
                linc += 1
                i += 1
            while i < n - 1 and a[i] > a[i + 1]:
                ldec += 1
                i += 1
            if linc > 0 and ldec > 0:
                res = max(res, i - st + 1)
            while i < n - 1 and a[i] == a[i + 1]:
                i += 1
        return res if res >= 0 else 0

ob = Solution()
nums = [8, 2, 4, 6, 3, 1]
print(ob.solve(nums))
ইনপুট
[8, 2, 4, 6, 3, 1]
আউটপুট
5
  1. পাইথনে বদলাফালা অসমতা উপাদান সাবলিস্টের সর্বোচ্চ দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে সর্বোচ্চ ক্রমবর্ধমান সাবসিকোয়েন্সের দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে স্বতন্ত্র উপাদান সম্বলিত সর্বোচ্চ দীর্ঘ সাবলিস্টের দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম

  4. পাইথনে একটি উপাদান সরিয়ে কনটিগুয়াস স্ট্রিক্টলি ইনক্রিজিং সাবলিস্টের সর্বোচ্চ দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম