给你一个整数数组 nums
和一个整数 k
,请你统计并返回 该数组中和为 k
的子数组的个数 。
子数组是数组中元素的连续非空序列。
示例 1:
输入:nums = [1,1,1], k = 2 输出:2
示例 2:
输入:nums = [1,2,3], k = 3 输出:2
提示:
1 <= nums.length <= 2 * 104
-1000 <= nums[i] <= 1000
-107 <= k <= 107
前缀和+哈希表 //C ++ map find()函数用于查找具有给定键值k 的元素。如果找到该元素,则返回指向该元素的迭代器。 //否则,它返回一个指向map末尾的迭代器,即map :: end()。 class Solution { public: int subarraySum(vector<int>& nums, int k) { int s=0; int res=0; unordered_map<int,int> mp; mp[0]=1; for(int i=0;i<nums.size();i++){ s+=nums[i]; int a=s-k; if(mp.find(a)!=mp.end()) res+=mp[a]; mp[s]++; } return res; } };