我正在查看下面的解决方案,并花了很多时间试图理解它为什么有效,但无法弄清楚。假设我的理解是正确的,f1存储正数的最大长度,f2存储负数的最大长度,为什么当数字为负且f2也为零时f1重置为0?
class Solution {
func getMaxLen(_ nums: [Int]) -> Int {
var f1 = 0
var f2 = 0
var result = 0
for num in nums {
if num > 0 {
f1 += 1
if f2 > 0 {
f2 += 1
}
} else if num < 0 {
let temp = f1
if f2 > 0 {
f1 = f2 + 1
} else {
f1 = 0
}
f2 = temp + 1
} else {
f1 = 0
f2 = 0
}
result = max(result, f1)
}
return result
}
}
阅读这篇文章,但它没有解释为什么 f1 重置为零。提前非常感谢您:https://algo.monster/liteproblems/1567
假设我的理解是正确的,f1存储正数的最大长度,f2存储负数的最大长度
你的这个理解并不完全正确。在您提供的代码中 -
f1 表示以正积结束于当前位置的子数组的长度,f2(如果非零)表示以负积结束于当前位置的子数组的长度。
为什么当数字为负数且f2也为零时,f1重置为0?
f2 = 0 表示以负乘积结束于当前位置的子数组的长度为 0,这意味着当前索引之前没有任何负数。当当前索引为负数时,如果之前存在任何负数,则只有可能使乘积为正数,而 f2=0 时情况并非如此,因此不可能获得以当前索引结尾的子数组具有正积的指数。这就是为什么 f1 变成 0。