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 <vector>
2using namespace std;
3
4class Solution {
5public:
6 long long zeroFilledSubarray(vector<int>& nums) {
7 int count = 0;
8 long long subarrayCount = 0;
9 for (int num : nums) {
10 if (num == 0) {
11 count++;
12 } else {
13 count = 0;
14 }
subarrayCount += count;
}
return subarrayCount;
}
};
The C++ solution is similar to the C version, utilizing STL vectors. It increments a count of zeros whenever a zero is encountered and adds to subarrayCount
each time based on the running value of count
.
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.
The Python implementation counts subarrays by adding to zero_ends_here
with each zero found, contributing to count
, and resets when needed.