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