前缀和的基本概念
考察S[R]-S[L-1]是否等于k,哈希表的作用可以快速插入一个数、可以快速找到一个数、可以统计数出现的次数。
以下为Java代码:
class Solution {
public int subarraySum(int[] nums, int k) {
int result = 0;
int sum = 0; //表示前缀和
Map<Integer,Integer> map = new HashMap<>();
map.put(0,1); //S[R]-S[L-1] 边界条件
for(int i=0;i<nums.length;i++) {
sum+=nums[i];
if(map.containsKey(sum-k)) {
result += map.get(sum-k);
}
if(map.containsKey(sum)) {
int value = map.get(sum);
map.put(sum,++value);
} else {
map.put(sum, 1);
}
}
return result;
}
}