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,因此如果我们翻转2 0,则数组可以为像[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