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.
Example 1:
Input: nums = [1,1,0,1] Output: 3 Explanation: After deleting the number in position 2, [1,1,1] contains 3 numbers with value of 1's.
Example 2:
Input: nums = [0,1,1,1,0,1,1,0,1] Output: 5 Explanation: After deleting the number in position 4, [0,1,1,1,1,1,0,1] longest subarray with value of 1's is [1,1,1,1,1].
Example 3:
Input: nums = [1,1,1] Output: 2 Explanation: You must delete one element.
Example 4:
Input: nums = [1,1,0,0,1,1,1,0,1] Output: 4
Example 5:
Input: nums = [0,0,0] Output: 0
Constraints:
1 <= nums.length <= 10^5
nums[i]
is either0
or1
.
public int longestSubarray(int[] nums) { int ans = 0; for (int i = 0, j = 0, sum = 0; j < nums.length; ++j) { sum += nums[j]; while (i < j && sum < j - i) { sum -= nums[i++]; } ans = Math.max(ans, j - i); } return ans; }
摸到泥鳅了,哎呀好滑呀
确认过眼神,是不会的sliding window。
sum:window内1的数量
while循环(纠正window size),
we want to find a window that only contains a single zero and the rest of the elements are all ones.