(前缀和)和为k的子数组

2021-05-02  本文已影响0人  小幸运Q

image.png

需要处理一个特殊前缀和(即-1位置对应的前缀和为0,直接设置map[0]=1即可),在添加sums进map之前需要计算该点之前有多少点满足到该点的和为k。map存储前缀和key对应的点个数。

class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        unordered_map<int,int>m;
        int sums=0;
        int counts=0;
        m[0]=1;
        for(int i=0;i<nums.size();i++){
            sums+=nums[i];
            if(m.count(sums-k)){
                counts+=m[sums-k];
            }
            m[sums]++;
        }
        return counts;
    }
};
上一篇下一篇

猜你喜欢

热点阅读