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

পাইথনে বাইনারি লিস্টে k বিট ফ্লিপ করে সবচেয়ে লম্বা ১-র সাবলিস্ট বের করার প্রোগ্রাম


মান লক্ষ্য করুন আমাদের কাছে একটি বাইনারি লিস্ট আছে (শুধু ১ এবং ০) এবং একটি সংখ্যা k। আমরা সর্বোচ্চ kটি ০ কে ১ বানাতে পারি। আমাদের কাজ হল সবচেয়ে লম্বা সাবলিস্টের দৈর্ঘ্য বের করা যেটি সম্পূর্ণ ১ দিয়ে ভরা।

উদাহরণস্বরূপ, যদি ইনপুট হয় nums = [0, 1, 1, 0, 0, 1, 1] এবং k = 2, তবে আউটপুট হবে 6, কারণ আমরা মাঝপথের দুটি ০ কে ১ বানালে লিস্টটি হবে [0, 1, 1, 1, 1, 1, 1]।

সমাধানের ধাপসমূহ:
  • zeros := 0, ans := 0, j := 0
  • প্রতিটি ইনডেক্স i এবং ভ্যালু n এর জন্য nums-এ:
    • zeros := zeros + (1 if n == 0 else 0)
    • zeros > k হলে লুপ চালান:
      • zeros := zeros - (1 if nums[j] == 0 else 0)
      • j := j + 1
    • যদি i - j + 1 > ans হয়, তবে ans := i - j + 1
  • ans রিটার্ন করুন।
উদাহরণ কোড
class Solution:
    def solve(self, nums, k):
        zeros = 0
        ans = 0
        j = 0
        for i, n in enumerate(nums):
            zeros += n == 0
            while zeros > k:
                zeros -= nums[j] == 0
                j += 1
            if i - j + 1 > ans:
                ans = i - j + 1
        return ans

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

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

  3. পাইথনে '?' রিপ্লেস করে 'a' দিয়ে শুরু হওয়া সর্বোচ্চ কনsekutিভ ইনক্রিজিং সাবস্ট্রিং খুঁজে বের করার প্রোগ্রাম

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