1493. Longest Subarray of 1's After Deleting One Element

roh·2025년 8월 4일

LeetCode

목록 보기
23/46

문제

1493. Longest Subarray of 1's After Deleting One Element
Array Dynamic Programming Sliding Window

이진 배열 nums에서 반드시 하나의 요소를 삭제해야 할 때, 남은 배열에서 오직 1만으로 이루어진 연속된 부분 배열 중 가장 긴 것의 길이를 반환하는 문제

  • 오직 1만으로 이루어진 연속된 부분 배열이 존재하지 않는다면 0 반환

첫 번째 풀이

문제 접근

  • 슬라이딩 윈도우를 사용하여 0을 최대 1개만 포함하는 구간 유지
  • 윈도우 안에 0이 2개 이상 들어오면 left 포인터를 오른쪽으로 이동시켜 0의 개수를 1개 이하로 유지
  • 반드시 하나의 요소를 삭제해야 하기 때문에, 윈도우의 실제 유효 거리는 right - left이며, 이 중에서 가장 큰 값을 maxLen으로 저장하고 최종적으로 반환

코드

/**
 * @param {number[]} nums
 * @return {number}
 */
var longestSubarray = function (nums) {
    let left = 0;
    let zeroCount = 0;
    let maxLen = 0;

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

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

        maxLen = Math.max(maxLen, right - left);
    }

    return maxLen;
};
profile
일단 해보자

0개의 댓글