투포인터 문제를 풀어봤다. 투 포인터의 기본적인 템플릿은 while 문을 두번 사용하면서, 첫번째 while문은 배열을 읽는 목적, 그리고 두번째 while 문은 문제가 원하는 최소 조건을 만족하면서 가장 길거나 가장 짧은 구간을 지속적으로 업데이트 시켜준다
두번째 while 문이 사실상 제일 중요한데 이번 문제에는 어떤 조건이 좋을까 고민을 많이 해봤다.
일단 zeroCount는 한번 사용해주는게 최대 이기때문에 만약에 zeroCount 가 2개 이상이라는 가정 하에 start 구간을 좁혀주고 answer의 최대 구간을 지속적으로 업데이트 해주었다.
그래도 감을 계속해서 잃지 않고 키워주는게 중요할 거 같다.
class Solution {
public:
int findMaxConsecutiveOnes(vector<int>& nums) {
int start = 0, end = 0, zeroCount = 0;
int answer = 0;
while(end < nums.size()){
if(nums[end] == 0) zeroCount++;
while(zeroCount >= 2){
if(nums[start++] == 0) zeroCount--;
}
answer = max(answer, end - start + 1);
end++;
}
return answer;
}
};