在由若干 0
和 1
组成的数组 A
中,有多少个和为 S
的非空子数组。
示例:
输入:A = [1,0,1,0,1], S = 2
输出:4
解释:
如下面黑体所示,有 4 个满足题目要求的子数组:
[1,0,1,0,1]
[1,0,1,0,1]
[1,0,1,0,1]
[1,0,1,0,1]
提示:
A.length <= 30000
0 <= S <= A.length
A[i]
为 0
或 1
C++
class Solution {
public:
int numSubarraysWithSum(vector<int>& A, int S)
{
int res=0;
int n=A.size();
map<int,int> tmp;
tmp[0]=1;
int sum=0;
for(int i=0;i<n;i++)
{
sum+=A[i];
res+=tmp[sum-S];
tmp[sum]++;
}
return res;
}
};
python
class Solution:
def numSubarraysWithSum(self, A: List[int], S: int) -> int:
res=0
n=len(A)
dic={0:1}
su=0
for i in range(n):
su+=A[i]
if su-S in dic:
res+=dic[su-S]
if su in dic:
dic[su]+=1
else:
dic[su]=1
return res