全 0 子数组的数目 ^.^ 2022/08/17

https://leetcode.cn/problems/number-of-zero-filled-subarrays/
看完示例之后的第一反应:先找这个数组内最长的由0组成的子数组。然后再去逐个拆分这些子数组,最后加到结果中。
只是其中有个点,可能初学者不太容易get到,比如0000这个数组。
如果取一个:索引从0到3,长度为1,一共有4个
如果取两个:索引从0到2,长度为2,一共有3个
如果取三个:索引从0到1,长度为3,一共有2个
如果取四个:索引从0到0,长度为4,一共有1个
所以子数组有n个0,就是有0+1+2+……+n。
最后代码如下:

    public long zeroFilledSubarray(int[] nums) {
        long count = 0;
        int tempCount = 0;
        for (int num : nums) {
            if (num == 0) {
                tempCount++;
            } else {
                while (tempCount != 0) {
                    count = count + (tempCount--);
                }
            }
        }
        while (tempCount != 0) {
            count = count + (tempCount--);
        }
        return count;
    }

你可能感兴趣的:(全 0 子数组的数目 ^.^ 2022/08/17)