Problem
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.
Constraints:
1 <= nums.length <= 105
nums[i]
is either0
or1
.
Solution
/**
* @param {number[]} nums
* @return {number}
*/
var longestSubarray = function(nums) {
var max = 0;
var last = 0;
var current = 0;
var hasZero = false;
for (var i = 0; i <= nums.length; i++) {
if (nums[i] === 0 || i === nums.length) {
max = Math.max(max, last + current);
last = current;
current = 0;
} else {
current += 1;
}
hasZero = hasZero || nums[i] === 0;
}
return hasZero ? max : max - 1;
};
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(1).