Day 22 of 30 days Leetcode challenge - Subarray Sum Equals K
Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k.
Example 1:
Input:nums = [1,1,1], k = 2
Output: 2
Note:
- The length of the array is in range
[1, 20,000]
. - The range of numbers in the array is
[-1000, 1000]
and the range of the integer k is[-1e7, 1e7]
.
Solution
Prefix sum with hash table
sum(i,j) = sum(0, j) - sum(0,i)
O(n) time and O(n) space
class Solution {
func subarraySum(_ nums: [Int], _ k: Int) -> Int {
var cSum = 0
var previousSum = [0: 1]
var result = 0
for val in nums {
cSum += val
if let found = previousSum[cSum - k] {
result += found
}
previousSum[cSum] = (previousSum[cSum] ?? 0) + 1
}
return result
}
}