ধরুন আমাদের 0s এবং 1s এর একটি অ্যারে আছে, আমরা 0 থেকে 1 পর্যন্ত K মান পর্যন্ত আপডেট করতে পারি। আমাদের সবচেয়ে দীর্ঘতম (সংলগ্ন) সাবয়ারের দৈর্ঘ্য খুঁজে বের করতে হবে যেটিতে শুধুমাত্র 1s রয়েছে। সুতরাং যদি A =[1,1,1,0,0,0,1,1,1,1,0] এবং k =2, তাহলে আউটপুট হবে 6, তাই যদি আমরা 2 0s ফ্লিপ করি, তাহলে অ্যারে হতে পারে যেমন [1,1,1,0,0,1,1,1,1,1,1], 1s এর দীর্ঘতম অনুক্রমের দৈর্ঘ্য হল 6।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- উত্তর সেট করুন :=0, j :=0 এবং n :=অ্যারের আকার
- আমি 0 থেকে n – 1
- পরিসরে
- যদি A[i] 0 হয়, তাহলে k কে 1 কমিয়ে দিন
- যখন j <=i এবং k <0
- যদি A[j] =0 হয়, তাহলে k কে 1 দ্বারা বাড়ান
- j 1 দ্বারা বাড়ান
- উত্তর :=i – j + 1 এর সর্বোচ্চ, ans
- উত্তর ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int longestOnes(vector<int>& A, int k) {
int ans = 0;
int j = 0;
int n = A.size();
for(int i = 0; i < n; i++){
if(A[i] == 0) k--;
while(j <= i && k <0){
if(A[j] == 0){
k++;
}
j++;
}
ans = max(i - j + 1, ans);
}
return ans;
}
};
main(){
vector<int> v = {1,1,1,0,0,0,1,1,1,1,0};
Solution ob;
cout <<(ob.longestOnes(v, 3));
} ইনপুট
[1,1,1,0,0,0,1,1,1,1,0] 3
আউটপুট
10