C ++中的Max Conecutive Ones III
假设我们有一个0和1的数组A,我们最多可以将K值更新为0到1。我们必须找到仅包含1的最长(连续)子数组的长度。因此,如果A=[1,1,1,0,0,0,1,1,1,1,1,0]且k=2,则输出将为6,因此如果我们翻转20,则数组可以为像[1,1,1,0,0,1,1,1,1,1,1,1]一样,最长序列的长度为1s为6。
为了解决这个问题,我们将遵循以下步骤-
设置ans:=0,j:=0和n:=数组大小
对于i,范围为0至n–1
如果A[j]=0,则将k增加1
将j增加1
如果A[i]为0,则将k减1
当j<=i并且k<0
ans:=i–j+1,ans的最大值
返回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