560. 和为K的子数组
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。
示例 1 :
输入:nums = [1,1,1], k = 2
输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。
/*前缀和+hash*/
class Solution
{
public:
int subarraySum(vector<int>& nums, int k)
{
int cnt=0,pre=0;
unordered_map<int,int>hash;
hash[0]=1;//哈希key-value对应前缀和-该前缀和出现的次数
for(auto n:nums)
{
pre+=n;
if(hash.find(pre-k)!=hash.end())
{
cnt+=hash[pre-k];
}
hash[pre]++;
}
return cnt;
}
};