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

김준수·2024년 3월 4일
0

LeetCode 75

목록 보기
17/63
post-custom-banner

Description

Given a binary array nums, you should delete one element from it.

Return the size of the longest non-empty subarray containing only 1's in the resulting array. Return 0 if there is no such subarray.


이진 배열 nums 중 요소 하나를 삭제해야 합니다.

요소를 삭제한 결과 배열에서 중간에 빈 부분이없이 1만 포함하는 가장 긴 부분 배열의 크기를 반환합니다. 그런 부분 배열이 없으면 0을 반환합니다.

Example 1:

Input: nums = [1,1,0,1]
Output: 3
Explanation: 2번 위치 요소를 제거 하면, [1,1,1] 배열은 3개의 1 을 가진 배열이 됨.

Example 2:

Input: nums = [0,1,1,1,0,1,1,0,1]
Output: 5
Explanation: 4번 위치에 배열에서 삭제한 뒤, [0,1,1,1,1,1,0,1] 배열에서 가장 긴 1이 연속된 부분 배열은 [1,1,1,1,1].

Example 3:

Input: nums = [1,1,1]
Output: 2
Explanation: 당신은 반드시 1개의 부분 배열을 제거해야 합니다.

Constraints:

  • 1 <= nums.length <= 105
  • nums[i] is either 0 or 1.

Solution


class Solution {
    public int longestSubarray(int[] nums) {
        int n = nums.length;

        int left = 0;
        int zeros = 0;
        int ans = 0;

        for (int right = 0; right < n; right++) {
            if (nums[right] == 0) {
                zeros++;
            }
            while (zeros > 1) {
                if (nums[left] == 0) {
                    zeros--;
                }
                left++;
            }
            ans = Math.max(ans, right - left + 1 - zeros);
        }
        return (ans == n) ? ans - 1 : ans;
    }
}
post-custom-banner

0개의 댓글