Welcome to Subscribe On Youtube
930. Binary Subarrays With Sum
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
Solutions
-
class Solution { public int numSubarraysWithSum(int[] nums, int goal) { int i1 = 0, i2 = 0, s1 = 0, s2 = 0, j = 0, ans = 0; int n = nums.length; while (j < n) { s1 += nums[j]; s2 += nums[j]; while (i1 <= j && s1 > goal) { s1 -= nums[i1++]; } while (i2 <= j && s2 >= goal) { s2 -= nums[i2++]; } ans += i2 - i1; ++j; } return ans; } }
-
class Solution { public: int numSubarraysWithSum(vector<int>& nums, int goal) { int i1 = 0, i2 = 0, s1 = 0, s2 = 0, j = 0, ans = 0; int n = nums.size(); while (j < n) { s1 += nums[j]; s2 += nums[j]; while (i1 <= j && s1 > goal) s1 -= nums[i1++]; while (i2 <= j && s2 >= goal) s2 -= nums[i2++]; ans += i2 - i1; ++j; } return ans; } };
-
class Solution: def numSubarraysWithSum(self, nums: List[int], goal: int) -> int: i1 = i2 = s1 = s2 = j = ans = 0 n = len(nums) while j < n: s1 += nums[j] s2 += nums[j] while i1 <= j and s1 > goal: s1 -= nums[i1] i1 += 1 while i2 <= j and s2 >= goal: s2 -= nums[i2] i2 += 1 ans += i2 - i1 j += 1 return ans
-
func numSubarraysWithSum(nums []int, goal int) int { i1, i2, s1, s2, j, ans, n := 0, 0, 0, 0, 0, 0, len(nums) for j < n { s1 += nums[j] s2 += nums[j] for i1 <= j && s1 > goal { s1 -= nums[i1] i1++ } for i2 <= j && s2 >= goal { s2 -= nums[i2] i2++ } ans += i2 - i1 j++ } return ans }
-
/** * @param {number[]} nums * @param {number} goal * @return {number} */ var numSubarraysWithSum = function (nums, goal) { let i1 = 0, i2 = 0, s1 = 0, s2 = 0, j = 0, ans = 0; const n = nums.length; while (j < n) { s1 += nums[j]; s2 += nums[j]; while (i1 <= j && s1 > goal) s1 -= nums[i1++]; while (i2 <= j && s2 >= goal) s2 -= nums[i2++]; ans += i2 - i1; ++j; } return ans; };