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