2348. 全 0 子数组的数目 - 力扣(LeetCode)


可以使用前缀和的方法来解决这个问题。由于我们需要统计所有元素为 0 的子数组数量,我们可以遍历数组,当遇到 0 时,计算以该 0 结尾的子数组数量,并累加到总数中。
方法:
- 遍历数组,使用
count记录当前连续的 0 的个数。 - 遇到 0 时,
count++,并将count加到result中。 - 遇到非 0 时,重置
count为 0。 - 返回
result。
代码:
def zeroFilledSubarray(nums):
count = 0 # 记录当前连续 0 的数量
result = 0 # 记录满足条件的子数组数量
for num in nums:
if num == 0:
count += 1
result += count # 累加以当前 0 结尾的子数组数量
else:
count = 0 # 遇到非 0,则重新计数
return result
示例:
nums = [0, 0, 0, 2, 0, 0]
print(zeroFilledSubarray(nums)) # 输出 9
计算过程:
对于 [0, 0, 0]:
- 第一个
0:1 个子数组[0] - 第二个
0:[0]和[0, 0](共 2 个) - 第三个
0:[0]、[0, 0]和[0, 0, 0](共 3 个)
即 1 + 2 + 3 = 6。
对于 [0, 0]:
- 第一个
0:1 个子数组[0] - 第二个
0:[0]和[0, 0](共 2 个)
即 1 + 2 = 3。
最终 6 + 3 = 9。
460

被折叠的 条评论
为什么被折叠?



