Problem
Given a binary array nums and an integer goal, return the number of non-empty subarrays with a sum goal.
Code
class Solution:
def numSubarraysWithSum(self, nums, goal):
count,i,j,sumSoFar=0,0,0,0
N=len(nums)
while j < N:
if sumSoFar==goal:
print('my solution is [' , i , j , ']')
count+=1
sumSoFar+=nums[j]
j+=1
elif sumSoFar > goal:
sumSoFar-=nums[i]
i+=1
else:
sumSoFar+=nums[j]
j+=1
while i < N:
if sumSoFar == goal:
count+=1
sumSoFar-=nums[i]
i+=1
return count
solution = Solution()
array = [1,0,1,0,1]
goal = 2
a = solution.numSubarraysWithSum(array,goal) #expected 4
print(a) # Output: 4
array = [0,0,0,0,0]
goal = 0
a = solution.numSubarraysWithSum(array,goal) #expected 15
print(a) # Output: 10
Issue
when j == N it stops but it has other subarrays to consider like if you consider
nums=[0,0,0,0] and goal=0 you see that it doesnt consider cases from index 2-3 or 1-3 inclusive. When i have a case of [0,0,0,0,0] and i figure out my sumSoFar == 0 at i=0 j=1 ([0,0] as subarray) i dont know how to move forward because if i move forward with i, its a possible subarray and if i move forward with j its a possible subarray. I have to pick one and thus i am missing out on other possible sub arrays and my count is lower than it should be.