Sponsored
Sponsored
This approach involves iterating through the array and counting the length of contiguous segments of zeros. For each segment of zeros with length n
, the total number of zero-filled subarrays is the sum of the first n
natural numbers.
For a segment with length n
, the number of zero-filled subarrays is (n * (n + 1)) / 2
. This formula is derived from the well-known sum formula for the first n
integers.
Time Complexity: O(n), where n
is the size of the input array. This is because we only traverse the array once.
Space Complexity: O(1), since we only use a constant number of extra variables.
1#include <stdio.h>
2
3int zeroFilledSubarray(int* nums, int numsSize) {
4 int count = 0;
5 long
The C solution iterates over the array, increasing the count
for each contiguous zero encountered and adds the current count to the total subarrayCount
anytime zeros[i] != 0
is encountered.
This approach is slightly variation. We keep track of the number of zero subarrays as we proceed through the array. Whenever a zero is encountered, the count of zero subarrays ending at that position is incremented by the number of zero subarrays ending at the previous position plus one. When a non-zero is encountered, we reset our counter.
Time Complexity: O(n) - traversing each element once to compute the solution.
Space Complexity: O(1) - using only a few extra integer variables for tracking.
using namespace std;
class Solution {
public:
long long zeroFilledSubarray(vector<int>& nums) {
long long count = 0, zeroEndsHere = 0;
for (int num : nums) {
if (num == 0) {
zeroEndsHere++;
count += zeroEndsHere;
} else {
zeroEndsHere = 0;
}
}
return count;
}
};
In C++, the concept of cumulative counting with zeroEndsHere
is used to build up the count
variable. Whenever zeros continue, we add their potential subarrays incrementally.