列表

详情


2348. 全 0 子数组的数目

给你一个整数数组 nums ,返回全部为 0 的 子数组 数目。

子数组 是一个数组中一段连续非空元素组成的序列。

 

示例 1:

输入:nums = [1,3,0,0,2,0,0,4]
输出:6
解释:
子数组 [0] 出现了 4 次。
子数组 [0,0] 出现了 2 次。
不存在长度大于 2 的全 0 子数组,所以我们返回 6 。

示例 2:

输入:nums = [0,0,0,2,0,0]
输出:9
解释:
子数组 [0] 出现了 5 次。
子数组 [0,0] 出现了 3 次。
子数组 [0,0,0] 出现了 1 次。
不存在长度大于 3 的全 0 子数组,所以我们返回 9 。

示例 3:

输入:nums = [2,10,2019]
输出:0
解释:没有全 0 子数组,所以我们返回 0 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: long long zeroFilledSubarray(vector<int>& nums) { } };

golang 解法, 执行用时: 112 ms, 内存消耗: 8.7 MB, 提交时间: 2022-11-18 16:53:07

func zeroFilledSubarray(nums []int) (ans int64) {
	c := 0
	for _, num := range nums {
		if num == 0 {
			c++
			ans += int64(c)
		} else {
			c = 0
		}
	}
	return
}

python3 解法, 执行用时: 152 ms, 内存消耗: 22.4 MB, 提交时间: 2022-11-18 16:52:49

class Solution:
    def zeroFilledSubarray(self, nums: List[int]) -> int:
        ans = c = 0
        for x in nums:
            if x:
                c = 0
            else:
                c += 1
                ans += c
        return ans

python3 解法, 执行用时: 104 ms, 内存消耗: 22.8 MB, 提交时间: 2022-11-18 16:51:43

class Solution:
    def zeroFilledSubarray(self, nums: List[int]) -> int:
        c = 0 # 当前片段连续0的个数
        ans = 0
        for num in nums:
            if num == 0:
                c += 1
            else:
                ans += c * (c+1) // 2
                c = 0
        if c > 0: ans += c * (c+1) // 2
        return ans

上一题