class Solution { public int numSubarraysWithSum(int[] A, int S) { int left = 0, right = 0, idx = 0; int sumL = 0, sumR = 0; int cnt = 0; while (idx < A.length) { sumL += A[idx]; while (left S) { sumL -= A[left++]; } sumR += A[idx]; while (right S || A[right] == 0)) { sumR -= A[right++]; } if (sumR == S) // or sumL == S cnt += right - left + 1; idx++; } return cnt; } }
For example
S = 2
1 0 0 1 0 1
x left x right x idx