930. Binary Subarrays With Sum
Given a binary array nums
and an integer goal
, return the number of non-empty subarrays with a sum goal
.
A subarray is a contiguous part of the array.
Example 1:
Input: nums = [1,0,1,0,1], goal = 2
Output: 4
Explanation: The 4 subarrays are bolded and underlined below:
[1,0,1,0,1]
[1,0,1,0,1]
[1,0,1,0,1]
[1,0,1,0,1]
Example 2:
Constraints:
1 <= nums.length <= 3 * 104
nums[i]
is either0
or1
.0 <= goal <= nums.length
Solution:
class Solution {
public int numSubarraysWithSum(int[] nums, int goal) {
int totalCount = 0;
int currentSum = 0;
Map<Integer, Integer> freq = new HashMap<>();
for (int num : nums){
currentSum += num;
if (currentSum == goal){
totalCount++;
}
if (freq.containsKey(currentSum - goal)){
totalCount += freq.get(currentSum - goal);
}
freq.put(currentSum, freq.getOrDefault(currentSum, 0) + 1);
}
return totalCount;
}
}