Given an array of integers nums
and an integer k
, return the total number of continuous subarrays whose sum equals to k
.
Example 1:
Input: nums = [1,1,1], k = 2 Output: 2
Example 2:
Input: nums = [1,2,3], k = 3 Output: 2
Constraints:
1 <= nums.length <= 2 * 104
-1000 <= nums[i] <= 1000
-107 <= k <= 107
Solution:
Let’s remember count[V], the number of previous prefix sums with value V. If our newest prefix sum has value W, and W-V == K, then we add count[V] to our answer.
This is because at time t, A[0] + A[1] + ... + A[t-1] = W
, and there are count[V]
indices j
with j < t-1
and A[0] + A[1] + ... + A[j] = V
. Thus, there are count[V]
subarrays A[j+1] + A[j+2] + ... + A[t-1] = K
.
def subarraySum(self, nums, k):
count, cur, res = {0: 1}, 0, 0
for v in nums:
cur += v
res += count.get(cur - k, 0)
count[cur] = count.get(cur, 0) + 1
return res