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;
}
网友评论