Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 Max Consecutive Ones III

<시간/>

0과 1의 배열 A가 있다고 가정하고 0에서 1까지 K 값까지 업데이트할 수 있습니다. 1만 포함하는 가장 긴(연속) 하위 배열의 길이를 찾아야 합니다. 따라서 A =[1,1,1,0,0,0,1,1,1,1,0]이고 k =2이면 출력은 6이 됩니다. 따라서 2개의 0을 뒤집으면 배열은 다음과 같습니다. [1,1,1,0,0,1,1,1,1,1,1]과 같이 1의 가장 긴 시퀀스의 길이는 6입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • ans :=0, j :=0 및 n :=배열 크기 설정
  • 0 ~ n – 1 범위의 i에 대해
    • A[i]가 0이면 k를 1만큼 감소
    • j <=i 및 k <0
        동안
      • A[j] =0이면 k를 1만큼 증가
      • j를 1 증가
    • ans :=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