
java
class Solution {
public int subarraySum(int[] nums, int k) {
Map<Integer,Integer> preSumMap = new HashMap<>();
preSumMap.put(0,1);
//记录一共多少子数组
int count = 0;
//记录当前总和
int preSum = 0;
for(int i = 0; i < nums.length; i++){
preSum += nums[i];
//目标总和 = 之前总和 - k
int target = preSum - k;
if(preSumMap.containsKey(target)){
count += preSumMap.get(target);
}
//将当前总和放到PreSumMap中,便于后续查找
preSumMap.put(preSum,preSumMap.getOrDefault(preSum,0) + 1);
}
return count;
}
}
preSumMap.put(preSum,preSumMap.getOrDefault(preSum,0) + 1):
查找preSumMap中是否有preSum这个数字,有把次数返回,没有就是0