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
}
最后更新于