携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情
给你一个二进制数组 nums ,你需要从中删掉一个元素。
请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。
如果不存在这样的子数组,请返回 0 。
提示 1:
输入: nums = [1,1,0,1]
输出: 3
解释: 删掉位置 2 的数后,[1,1,1] 包含 3 个 1 。
示例 2:
输入: nums = [0,1,1,1,0,1,1,0,1]
输出: 5
解释: 删掉位置 4 的数字后,[0,1,1,1,1,1,0,1] 的最长全 1 子数组为 [1,1,1,1,1] 。
示例 3:
输入: nums = [1,1,1]
输出: 2
解释: 你必须要删除一个元素。
提示:
1 <= nums.length <= 10^5nums[i]要么是0要么是1。
解题
/**
* @param {number[]} nums
* @return {number}
*/
var longestSubarray = function (nums) {
let idx1 = 0;
let oneCount = 0;
let zeroCount = 0;
let longest = 0;
for (let i = 0; i < nums.length; i++) {
if (nums[i] === 1) {
oneCount++;
if (zeroCount > 0) {
idx1 = i;
zeroCount = 0;
}
} else {
longest = Math.max(longest, oneCount);
zeroCount++;
if (zeroCount === 1) {
oneCount = i - idx1;
} else {
oneCount = 0;
}
}
}
longest = Math.max(longest, oneCount);
return longest === nums.length ? longest - 1 : longest;
};