Skip to content

和为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