Leetcode560. 和为 K 的子数组

126 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情

一、题目描述:

给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的连续子数组的个数。

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/su…

二、思路分析:

前缀和+map。map.set(0,1)是为了保证,一个元素本身等于k。

三、AC 代码:

 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var subarraySum = function(nums, k) {
    let map=new Map();
    map.set(0,1)
    let len =nums.length;
    let dp=0;
    let res=0;
    for(let i=0;i<len;i++){
        dp+=nums[i];
        if(map.has(dp-k)){
            res+=map.get(dp-k);
        }
        map.set(dp,map.has(dp)?map.get(dp)+1:1)
    }
    return res
};

四、总结:

前缀和+map