和为k的子数组
问题
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。
子数组是数组中元素的连续非空序列。
示例 1:
输入:nums = [1,1,1], k = 2
输出:2
示例 2:
输入:nums = [1,2,3], k = 3
输出:2
答案
js
var subarraySum = function(nums,k){
let map=new Map();
map.set(0,1);
let res=0;
let sum=0;
for(let num of nums){
sum+=num;
if(map.has(sum-k)){
res+=map.get(sum-k);
}
map.set(sum,(map.get(sum-k)||0)+1);
}
return res;
}
扩展
前缀和,如果当前的总和有减去某个前缀就能得到k的情况,结果就加上这个某个前缀和的个数
然后所有的总和就要加到map里,如果已经有的话就map.get(sum)+1,没有的话0+1