C ++中的Max Conecutive Ones II
假设我们有一个二进制数组;如果我们最多可以翻转一个0,则必须找到此数组中连续1的最大数目。
因此,如果输入类似于[1,0,1,1,0],则输出将为4,因为如果翻转第一个零将获得连续1的最大数目。翻转后,连续的1的最大数量为4。
为了解决这个问题,我们将遵循以下步骤-
ret:=1,n:=nums的大小
如果不是n不为零,则-
返回0
j:=0,零:=0
对于初始化i:=0,当i<n时,更新(将i增加1),执行-
如果nums[j]与0相同,则-
(将j增加1)
(将零减1)
(将零增加1)
如果nums[i]与0相同,则-
而(j<=i并且零>1),-
ret:=ret的最大值和(i-j+1)
返回ret
例
让我们看下面的实现以更好地理解-
#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