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
을 반환합니다.
Input: nums = [1,1,0,1]
Output: 3
Explanation: 2번 위치 요소를 제거 하면, [1,1,1] 배열은 3
개의 1
을 가진 배열이 됨.
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].
Input: nums = [1,1,1]
Output: 2
Explanation: 당신은 반드시 1개의 부분 배열을 제거해야 합니다.
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;
}
}