- 遍历数组,并用哈希存储目前为止的前缀和以及个数,即如果重复则加一,因为是目前为止的前缀和,所以哈希中保存的前缀和皆在当前所求前缀和的前面,所以哈希的无序性也无关紧要
- 拿当前的前缀和减去 k 然后去 map 中查找是否有前缀和符合要求,即使当前前缀和减去之前的前缀和等于 k ,并将符合要求的前缀和数量计入答案
- 并将当前前缀和存入 map
mp[0] = 1 : 初始化一下 map ,0 记为符合一次要求
代码:
func subarraySum(nums []int, k int) int {
mp := make(map[int]int)
mp[0] = 1
ans, s := 0, 0
for _, v := range nums {
s += v
ans += mp[s-k]
mp[s]++
}
return ans
}