ধরুন আমাদের একটি বাইনারি অ্যারে আছে; আমাদের এই অ্যারেতে সর্বোচ্চ সংখ্যক পরপর 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