কম্পিউটার

C++-এ সর্বোচ্চ ধারাবাহিক দ্বিতীয়


ধরুন আমাদের একটি বাইনারি অ্যারে আছে; আমাদের এই অ্যারেতে সর্বোচ্চ সংখ্যক পরপর 1s খুঁজে বের করতে হবে যদি আমরা সর্বাধিক এক 0 ফ্লিপ করতে পারি।

সুতরাং, যদি ইনপুটটি [1,0,1,1,0] এর মত হয়, তাহলে আউটপুট হবে 4 কারণ আমরা যদি প্রথম শূন্যটি ফ্লিপ করি তাহলে সর্বাধিক সংখ্যক পরপর 1s পাওয়া যাবে। ফ্লিপ করার পর, পরপর 1s-এর সর্বোচ্চ সংখ্যা হল 4।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • ret :=1, n :=সংখ্যার আকার

  • যদি n অ-শূন্য হয়, তাহলে −

    • রিটার্ন 0

  • j :=0, শূন্য :=0

  • আরম্ভ করার জন্য i :=0, যখন i

    • যদি সংখ্যা [i] 0 এর মত হয়, তাহলে −

      • (1 দ্বারা শূন্য বাড়ান)

    • যখন (j <=i এবং শূন্য> 1), −

      করুন
      • যদি সংখ্যা [j] 0 এর মত হয়, তাহলে −

        • (1 দ্বারা শূন্য হ্রাস করুন)

      • (j 1 দ্বারা বাড়ান)

    • ret :=ret এর সর্বোচ্চ এবং (i - j + 1)

  • রিটার্ন রিটার্ন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int findMaxConsecutiveOnes(vector<int<& nums) {
      int ret = 1;
      int n = nums.size();
      if (!n)
         return 0;
      int j = 0;
      int zero = 0;
      for (int i = 0; i < n; i++) {
         if (nums[i] == 0) {
            zero++;
         }
         while (j <= i && zero > 1) {
            if (nums[j] == 0) {
               zero--;
            }
            j++;
         }
         ret = max(ret, i - j + 1);
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<int< v = {1,0,1,1,1,0,1,1};
   cout << (ob.findMaxConsecutiveOnes(v));
}

ইনপুট

{1,0,1,1,1,0,1,1}

আউটপুট

6

  1. C++ এ একটি লাইনে সর্বোচ্চ পয়েন্ট

  2. C++ এ একটি স্ট্রীমে সর্বাধিক K সংখ্যার গড়

  3. C++ এ ইনলাইন ফাংশন

  4. সর্বোচ্চ হিপ বাস্তবায়নের জন্য C++ প্রোগ্রাম