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.
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]
Input: nums = [0,0,0,0,0], goal = 0 Output: 15
1 <= nums.length <= 3 * 104
nums[i]
is either0
or1
.0 <= goal <= nums.length
use std::collections::HashMap;
impl Solution {
pub fn num_subarrays_with_sum(nums: Vec<i32>, goal: i32) -> i32 {
let mut count = HashMap::new();
let mut sum = 0;
let mut ret = 0;
count.insert(0, 1);
for num in nums {
sum += num;
ret += count.get(&(sum - goal)).unwrap_or(&0);
*count.entry(sum).or_insert(0) += 1;
}
ret
}
}