[Sliding Window, Medium] Max Consecutive Ones III

송재호·2025년 3월 12일
0

https://leetcode.com/problems/max-consecutive-ones-iii/description/?envType=study-plan-v2&envId=leetcode-75

이전의 다른 문제들과 달리 단순히 윈도우만 이동시켜서 되는 문제는 아니다.
0을 k수만큼 flip할 수 있기 때문에 이것을 기준으로 봐야 함.

순회하면서, right == 0이면 zero 수를 ++시키고
만일 zero 수가 k를 넘어갔다면 left를 땡겨줘야 한다.
이 때, right == 0일 때 zero 수를 증가시켜줬었으므로 left또한 0이라면 zero 수를 다시 감소시킨다.
(원본 배열을 수정하지 않고 zero 수 기준으로만 탐색하기 때문)

그리고 right - left + 1로 연속 최대 길이를 구하면 된다.

class Solution {
    public int longestOnes(int[] nums, int k) {
        
        int zeros = 0;
        int left = 0;

        int max = 0;
        
        for (int right=0; right<nums.length; right++) {
            if (nums[right] == 0) {
                zeros++;
            }

            while (zeros > k) {
                if (nums[left] == 0) {
                    zeros--;
                }
                left++;
            }
            max = Math.max(max, right - left + 1);
        }
        return max;
    }
}
profile
식지 않는 감자

0개의 댓글