给你一个整数数组 nums
和一个整数 k
,请你统计并返回 该数组中和为 k
的子数组的个数 。
示例 :
输入:nums = [1,2,3], k = 3 输出:2
class Solution {
public int subarraySum(int[] nums, int k) {
int presum = 0, count=0;
int n = nums.length;
Map<Integer,Integer> map = new HashMap<>();
//new一个map,key为第i个数的前缀和,value为这个前缀和的次数
map.put(0,1);
for(int i=0; i<n; i++){
presum += nums[i];
//如果当前nums[i]的前缀和presum减去k,等于之前的前缀和,表明当前nums[i]与前面的某个nums[j]之间的数组和为k
if(map.containsKey(presum - k)){
count += map.get(presum - k);
}
map.put(presum, map.getOrDefault(presum, 0)+1);
}
return count;
}
}