Leetcode
问题描述
In an array A of 0s and 1s, how many non-empty subarrays have sum S?
例子
Example 1:
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 Java **
** 2ms, beats 84.49% **
** 44MB, beats 25.00% **
class Solution {
public int numSubarraysWithSum(int[] A, int S) {
int n = A.length, res = 0, sum = 0;
int[] map = new int[n + 1];
map[0] = 1;
for (int i = 0; i < n; ++i) {
sum += A[i];
if (sum >= S)
res += map[sum - S];
++map[sum];
}
return res;
}
}
方法二
** Solution Java **
** 1ms, beats 100.00% **
** 44.3MB, beats 25.00% **
class Solution {
public int numSubarraysWithSum(int[] A, int S) {
return atMost(A, S) - atMost(A, S - 1);
}
private int atMost(int[] A, int S) {
if (S < 0)
return 0;
int res = 0, n = A.length;
for (int i = 0, j = 0; j < n; ++j) {
S -= A[j];
while (S < 0)
S += A[i++];
res += j - i + 1;
}
return res;
}
}