1493 删除一个元素以后全为1的最长子数组-中等

题目:

给你一个二进制数组 nums ,你需要从中删掉一个元素。

请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。

如果不存在这样的子数组,请返回 0 。

分析:

声明两个变量,分别记录连续 1 的个数,因为允许删除一个元素,那么如果该元素为0,那么此时连续 1 的长度可以复用前一个值。

// date 2023/11/28
func longestSubarray(nums []int) int {
    var ans int
    p1, p0 := 0, 0

    for _, v := range nums {
        if v == 1 {
            p1++
            p0++
        } else {
          	// 遇到第一个零,连续 1 的个数沿用前值
            p1 = p0
            p0 = 0
        }
        if ans < p1 {
            ans = p1
        }
    }


    if ans == len(nums) {
        ans--
    }

    return ans
}

最后更新于