# Solving Leetcode Interviews in Seconds with AI: Binary Subarrays With Sum


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "930" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

	# Problem Statement
	> 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  

	# Explanation
	Here's a solution to the problem, focusing on efficiency and clarity:

*   **Prefix Sum and Hash Map:** Calculate the prefix sum of the array. Use a hash map to store the frequency of each prefix sum encountered.
*   **Counting Subarrays:** Iterate through the prefix sums. For each prefix sum `prefix_sum[i]`, check how many times `prefix_sum[i] - goal` has appeared previously. This count represents the number of subarrays ending at index `i` with a sum equal to `goal`.
*   **Handle Edge Cases:** Correctly handle the case where the goal is 0, and initialize the hash map appropriately.

*   **Runtime Complexity:** O(n), where n is the length of the input array. **Storage Complexity:** O(n) in the worst case (when all prefix sums are distinct).

	
	# Code
	```python
	def numSubarraysWithSum(nums, goal):
    prefix_sum_count = {0: 1}  # Initialize count for prefix sum 0
    current_sum = 0
    count = 0

    for num in nums:
        current_sum += num
        diff = current_sum - goal

        if diff in prefix_sum_count:
            count += prefix_sum_count[diff]

        if current_sum in prefix_sum_count:
            prefix_sum_count[current_sum] += 1
        else:
            prefix_sum_count[current_sum] = 1

    return count
	```
			
