Description
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:
1 <= nums.length <= 3 * 104
nums[i]
is either0
or1
.0 <= goal <= nums.length
Solution
Python3
class Solution:
def numSubarraysWithSum(self, nums: List[int], goal: int) -> int:
N = len(nums)
def atMost(k):
if k < 0: return 0
i = curr = res = 0
for j, x in enumerate(nums):
curr += x
while curr > k:
curr -= nums[i]
i += 1
res += (j - i + 1)
return res
return atMost(goal) - atMost(goal - 1) # to find the number of subarrays with exact "goal"