核心思想:前缀和+遍历
思路:
和路径总和,也就是第91题思想相似。
class Solution {
public int subarraySum(int[] nums, int k) {
int len = nums.length;
if(len == 0){
return 0;
}
//左边为已经出现的和,右边为出现次数
HashMap<Integer,Integer> map = new HashMap<>();
int count = 0;
int cur = 0;
map.put(0, 1);
for(int i = 0; i < len; i++){
cur += nums[i];
//getOrDefault(cur - k, 0)其实是在找起点是否存在,因为map中只存节点的和,只有在节点的和不等于0
if(map.getOrDefault(cur - k, 0) != 0){
count += map.get(cur - k);
}
//把当前和放入map中
map.put(cur, map.getOrDefault(cur, 0)+1);
}
return count;
}
}