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

C++의 Max Consecutive Ones II

<시간/>

이진 배열이 있다고 가정합니다. 최대 하나의 0을 뒤집을 수 있다면 이 배열에서 연속 1의 최대 수를 찾아야 합니다.

따라서 입력이 [1,0,1,1,0]과 같으면 출력은 4가 됩니다. 왜냐하면 우리가 첫 번째 0을 뒤집으면 연속 1의 최대 수가 되기 때문입니다. 뒤집은 후 연속 1의 최대 수는 4입니다.

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

  • ret :=1, n :=숫자 크기

  • n이 0이 아닌 경우 -

    • 0 반환

  • j :=0, 0 :=0

  • initialize i :=0의 경우, i

    • nums[i]가 0과 같으면 -

      • (0을 1씩 증가)

    • 동안 (j <=i 및 0> 1), 수행 -

      • nums[j]가 0과 같으면 -

        • (0을 1씩 감소)

      • (j를 1씩 증가)

    • ret :=ret의 최대값 및 (i - j + 1)

  • 리턴 렛

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#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