16. Binary Subarrays With Sum
Input: A = [1,0,1,0,1], S = 2
Output: 4
Explanation:
The 4 subarrays are bolded below:
[1,0,1,0,1]
[1,0,1,0,1]
[1,0,1,0,1]
[1,0,1,0,1]Solution: (Sliding Window)
class Solution
{
public:
int numSubarraysWithSum(vector<int> &A, int S)
{
vector<int> v;
v.push_back(-1);
for (int i = 0; i < A.size(); i++)
{
if (A[i] == 1)
{
v.push_back(i);
}
}
v.push_back(A.size());
int res = 0;
if (S == 0)
{
for (int i = 1; i < v.size(); i++)
{
int dif = v[i] - v[i - 1] - 1;
res += dif * (dif + 1) / 2;
}
return res;
}
for (int i = 1; i < v.size() - 1; i++)
{
int j = i + S - 1;
if (j < v.size() - 1)
{
int ll = v[i] - v[i - 1];
int rl = v[j + 1] - v[j];
res += ll * rl;
}
}
return res;
}
};Solution: (Prefix Sum)
Previous15. Count Number of Nice SubarraysNext17.Number of Substrings Containing All Three Characters
Last updated