
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。
子数组是数组中元素的连续非空序列。
输入:nums = [1,1,1], k = 2
输出:2
输入:nums = [1,2,3], k = 3
输出:2
count:用于记录和为k的子数组的数量。pre:用于记录当前的前缀和。mp:HashMap,用于存储前缀和及其出现的次数。
public int subarraySum(int[] nums, int k) {
int pre=0; //前缀和
Map<Integer,Integer> map=new HashMap<>(); //存放key为前缀和,value为该前缀和出现的情况
map.put(0,1); //前缀和为0的情况有1种,即空数组
int count=0; //和为k的子数组的总数量
for(int i=0;i<nums.length;i++){
pre+=nums[i];
if(map.containsKey(pre-k)){
//count 加上 map包含pre与k的差值()
count+=map.get(pre-k);
}
map.put(pre,map.getOrDefault(pre,0)+1);
}
return count;
}
