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

পাইথনে কমপক্ষে k সংখ্যক বিষম মান সহ দীর্ঘতম ক্রমবর্ধমান উপক্রমের দৈর্ঘ্য নির্ণয়

ধরুন, nums নামক একটি সংখ্যার তালিকা এবং অন্য একটি মান k দেওয়া আছে। আমাদের কাজ হল কমপক্ষে k সংখ্যক বিষম উপাদান সन्नিবেশকারী দীর্ঘতম ক্রমবর্ধমান উপক্রমের আকার বের করা।

উদাহরণস্বরূপ, nums = [12, 14, 16, 5, 7, 8] এবং k = 2 হলে আউটপুট হবে ৩, কারণ কমপক্ষে ২টি বিষম মান ধারণকারী দীর্ঘতম ক্রমবর্ধমান উপক্রম হল [5, 7, 8]।

সমাধানের ধাপসমূহ

  • best := 0
  • dp() ফাংশন সংজ্ঞায়িত করুন যা i, j, odd, taken প্যারামিটার নেয়
  • যদি odd >= k হয়, তবে best := max(best, taken)
  • যদি j == len(nums) হয়, তবে ফেরত যান
  • যদি nums[j] > nums[i] হয়, তবে dp(j, j+1, odd + (nums[j] & 1), taken + 1) কল করুন
  • dp(i, j+1, odd, taken) কল করুন
  • মূল ফাংশন থেকে 0 থেকে len(nums)-1 পর্যন্ত i এর জন্য dp(i, i+1, nums[i] & 1, 1) কল করুন
  • best ফেরত দিন

উদাহরণ কোড

class Solution:
    def solve(self, nums, k):
        best = 0
        def dp(i, j, odd, taken):
            nonlocal best
            if odd >= k:
                best = max(best, taken)
            if j == len(nums):
                return
            if nums[j] > nums[i]:
                dp(j, j + 1, odd + (nums[j] & 1), taken + 1)
            dp(i, j + 1, odd, taken)
        for i in range(len(nums)):
            dp(i, i + 1, nums[i] & 1, 1)
        return best

ob = Solution()
nums = [12, 14, 16, 5, 7, 8]
k = 2
print(ob.solve(nums, k))

ইনপুট

[12, 14, 16, 5, 7, 8], 2

আউটপুট

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

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

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

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