其他分享
首页 > 其他分享> > 【LeetCode】560. 和为 K 的子数组

【LeetCode】560. 和为 K 的子数组

作者:互联网

class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        int n=nums.size();

        int presum[20010]={0};

        unordered_map<int,int> mp;
        mp[0]=1;  //前n项和0,出现次数为1次
        int ans = 0;

        for(int i=1;i<=n;++i)
        {
            presum[i]=presum[i-1]+nums[i-1];   //计算前缀和
            ans+=mp[presum[i]-k];  //去已经存入哈希表的前面的元素中寻找子连续数组
            ++mp[presum[i]];   //哈希表里面存储的是前n项和出现的次数
        }

        return ans;
    }
};

O(n)做法:记录前缀和,0项指全部为空,只有一种取法。其他细节见代码和注释。

标签:nums,560,unordered,20010,int,mp,数组,ans,LeetCode
来源: https://www.cnblogs.com/zzxcm/p/15864629.html