【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项指全部为空,只有一种取法。其他细节见代码和注释。

上一篇:【LeetCode】438. 找到字符串中所有字母异位词


下一篇:spring整合mybathis配置文件