1,题目描述 -- 和为K的子数组
给你一个整数数组 nums
和一个整数 k
,请你统计并返回 该数组中和为 k
的子数组的个数 。
子数组是数组中元素的连续非空序列。
2,代码详解
哈希+前缀和
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
var subarraySum = function(nums, k) {
let map = new Map();
// 键: pre[i]之和 值:和出现的次数
map.set(0,1);
let preSum = 0;
let counter = 0;
for(let i = 0 ;i < nums.length; i++){
preSum += nums[i];
// 如果存在
if(map.has(preSum - k)){
counter += map.get(preSum - k);
}
if(map.has(preSum)){
map.set(preSum,map.get(preSum ) + 1);
}else{
map.set(preSum,1);
}
}
return counter;
};