이진 배열이 있다고 가정합니다. 최대 하나의 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