g0901_1000.s0930_binary_subarrays_with_sum.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0901_1000.s0930_binary_subarrays_with_sum;
// #Medium #Array #Hash_Table #Prefix_Sum #Sliding_Window
// #2022_03_29_Time_3_ms_(84.84%)_Space_56.9_MB_(44.53%)
/**
* 930 - Binary Subarrays With Sum\.
*
* Medium
*
* 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 either `0` or `1`.
* * `0 <= goal <= nums.length`
**/
public 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;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy