diff --git a/rs/binary-subarrays-with-sum.rs b/rs/binary-subarrays-with-sum.rs new file mode 100644 index 0000000..4855be2 --- /dev/null +++ b/rs/binary-subarrays-with-sum.rs @@ -0,0 +1,34 @@ +impl Solution { + pub fn num_subarrays_with_sum(nums: Vec, goal: i32) -> i32 { + let mut subarrays = 0; + + let mut sum = 0; + let mut zeros = 0; + + let mut l = 0; + for r in 0..nums.len() { + sum += nums[r]; + + while l < r && (nums[l] == 0 || sum > goal) { + match nums[l] { + 0 => { + zeros += 1; + } + 1 => { + zeros = 0; + } + _ => unreachable!("either 0 or 1s"), + } + + sum -= nums[l]; + l += 1; + } + + if sum == goal { + subarrays += 1 + zeros; + } + } + + subarrays + } +}