930. Binary Subarrays With Sum

Difficulty:
Related Topics:
Similar Questions:

Problem

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:

Input: nums = [0,0,0,0,0], goal = 0
Output: 15

  Constraints:

Solution (Java)

class Solution {
    public int numSubarraysWithSum(int[] nums, int goal) {
        return goal == 0
                ? numSubarraysWithAtMostGoal(nums, 0)
                : numSubarraysWithAtMostGoal(nums, goal)
                        - numSubarraysWithAtMostGoal(nums, goal - 1);
    }

    private int numSubarraysWithAtMostGoal(int[] nums, int goal) {
        int windowSum = 0;
        int left = 0;
        int right = 0;
        int res = 0;
        while (right < nums.length) {
            windowSum += nums[right++];
            while (left < right && windowSum > goal) {
                windowSum -= nums[left++];
            }
            res += (right - left);
        }
        return res;
    }
}

Explain:

nope.

Complexity: