map默认是0;如果不赋值就是0;

这类题是哈希表的特殊应用,一般hash表用来统计频次,这类题核心

1.930. 和相同的二元子数组

在由若干 0 和 1  组成的数组 A 中,有多少个和为 S 的非空子数组。

示例:

输入:A = [1,0,1,0,1], S = 2
输出:4
解释:
如下面黑体所示,有 4 个满足题目要求的子数组:
[1,0,1,0,1]
[1,0,1,0,1]
[1,0,1,0,1]
[1,0,1,0,1]
// #include<unordered_map>
class Solution
{
public:
    int numSubarraysWithSum(vector<int>& A,int S)
    {
        //mp存储
        unordered_map<int,int> mp;
        //ans最后结果
        int ans=0,tmp=0;
        //前缀为0的目前有一个
        mp[0]++;
        for(auto x:A)
        {
            //依次遍历天然带有先后顺序
            //当前节点的前缀总和
            tmp+=x;
            //tmp-S 在此之前i<j&&s[j]-s[i]=S mp[tmp-S]的值有几个
            ans+=mp[tmp-S];
            //当前和为tmp的加一个
            mp[tmp]++;
        }
        return ans;
    }
};

  

 

posted on 2020-09-21 01:08  黑暗尽头的超音速炬火  阅读(159)  评论(0编辑  收藏  举报