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
Code
Hashmap
和 Subarray Sum Equals K 同樣概念。
The atMost Trick
和 Subarray Product Less Than K 一樣:
Each step introduces x
new subarrays, where x is the size of the current window (j + 1 - i)
; example: for window (5, 2), when 6 is introduced, it add 3 new subarray: (5, (2, (6)))。
關鍵在於:return atMost(nums, goal) - atMost(nums, goal - 1);
要注意 edge case:goal = 0
!
Time Complexity: , Space Complexity: