560. 和为 K 的子数组
前缀和的知识。
如果要求i~j下标之间的元素和,用前缀和的话,应该是b[j] - b[i-1],i处的值也应该包括。
所以这个题,前缀和数组就要比原数组整体向后平移一个单元格,不然在求0~n的和的时候没法取到-1。
class Solution {
public int subarraySum(int[] nums, int k) {
int[] b = new int[nums.length+1]; //前缀和数组
b[0] = 0;
int res = 0;
for(int i=0;i <nums.length; i++) {
b[i+1] = b[i] + nums[i];
if(nums[i] == k)
res ++;
}
System.out.println();
for(int i=1;i<b.length; i++){
for(int j=i+1; j<b.length;j++) {
if(b[j]-b[i-1] == k){
res ++;
}
}
}
return res;
}
}