(1)题目描述:
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。
(2)输入输出描述:
输入:nums =[1,1,1], k =2
输出:2
关键思路:
遍历数组,每到一个元素,记录当前元素前缀和,并且查找sum-k是否出现过。
(2)代码块
class Solution {
public:
int subarraySum(vector<int>& nums, int k){
int result =0;
int sum=0;
unordered_map<int,int> record; // 记录前缀和出现次数,key为前缀和,value为出现次数
record[0]=1;
for(int i =0;i<nums.size();++i){sum+= nums[i]; // 记录当前元素前缀和
if(record.count(sum-k))
result += record[sum - k]; // 查找前缀和是否出现过
record[sum]++;}return result;}};