[Sliding Window, Medium] Longest Subarray of 1's After Deleting One Element

송재호·2025년 3월 12일
0

https://leetcode.com/problems/longest-subarray-of-1s-after-deleting-one-element/description/?envType=study-plan-v2&envId=leetcode-75

힌트 참고했다. 0이 항상 한 개 껴있다고 생각하라고 한다.
그럼 아이디어가 잘 나왔다.

첫 번째 순회에서 0이 한 개 존재하는 동안 가장 긴 길이를 세팅한다.
두 번째 순회는 right를 증가하되 0의 갯수가 늘어나면 left를 ++시키면서 0이 한개 존재하는 상황을 유지하며 right - left + 1최대 길이를 갱신한다.

마지막으로 length는 0 한개를 포함한 길이이기 때문에, 이것을 제거했다고 취급하면 -1해서 리턴해주면 된다.

class Solution {
    public int longestSubarray(int[] nums) {
        
        int left = 0;
        int right = 0;
        int zeros = 0;

        int length = 0;
        for (int i=0; i<nums.length; i++) {
            if (nums[i] == 0) {
                zeros++;
            }
            if (zeros >= 2) {
                right = i;
                zeros--;
                break;
            }
            length++;
        }

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

            while (zeros >= 2) {
                if (nums[left] == 0) {
                    zeros--;
                }
                left++;
            }

            length = Math.max(length, right - left + 1);
        }

        return length - 1; // 0이 빠져야 함
    }
}
profile
식지 않는 감자

0개의 댓글