leetcode-560 和为k的数组

leetcode-560 和为k的数组

码农世界 2024-06-05 前端 86 次浏览 0个评论

一、题目描述

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

子数组是数组中元素的连续非空序列。

注意:nums中的元素可为负数

输入:nums = [1,1,1], k = 2
输出:2
输入:nums = [1,2,3], k = 3
输出:2
1 <= nums.length <= 2 * 104
-1000 <= nums[i] <= 1000
-107 <= k <= 107

二、题目解答

class Solution {
public:
    int subarraySum(vector& nums, int k) {
        //假设数组的前缀和为presum[i],那么对于任意两个下标i,j
        //如果presum[j]-presum[i] = k
        //那么从i+1到j的连续子数组合为 k
        //在遍历过程中,用哈希表存储前缀和出现的次数
        //如果存在哈希表中,那么就count+出现次数 
        int sum = 0;
        int count = 0;
        map  map_tmp;
        map_tmp [0] = 1;
        for (int i = 0; i < nums.size(); i++){
            sum = sum + nums[i];
            //有当前前缀和-k的前缀和
            if (map_tmp.find(sum - k) != map_tmp.end())
                count += map_tmp[sum - k];
            //判断完毕后再加入map
            map_tmp[sum]++;
        }
        return count;
    }
}

转载请注明来自码农世界,本文标题:《leetcode-560 和为k的数组》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,86人围观)参与讨论

还没有评论,来说两句吧...

Top