/*
* @lc app=leetcode.cn id=560 lang=javascript
*
* [560] 和为 K 的子数组
*/
// @lc code=start
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
var subarraySum = function (nums, k) {
let ans = 0, pre = 0;
const map = new Map();
// 为了匹配 k 和 pre 相等的情况,比如: pre = 7, k = 7
// 那说明 pre 是从索引 0 开始到当前索引的累加和,是符合条件的
// 所以需要在 hash 表中增加 0,不然会漏掉这种情况
map.set(0, 1);
for (let num of nums) {
pre += num;
ans += map.get(pre - k) ?? 0;
map.set(pre, (map.get(pre) ?? 0) + 1);
}
return ans;
};
// @lc code=end
console.log(subarraySum([1, 1, 1], 2))
console.log(subarraySum([1, 2, 3], 3))