题目所属分类
前缀和 哈希表
原题链接
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。
代码案例:输入:nums = [1,1,1], k = 2
输出:2
题解
前缀和 然后哈希表中存放的是前缀和对应的个数 答案res中记录着每个前缀和sum[i] -k的个数
class Solution {
public int subarraySum(int[] nums, int k) {
int n = nums.length ;
int[] sum = new int[n+1];
for(int i = 1 ; i <= n ; i++){
sum[i] = sum[i-1] + nums[i-1];
}
Map<Integer,Integer> hash = new HashMap<>();
hash.put(0 , 1);
int res =0 ;
for(int i = 1; i <= n ; i++ ){
res += hash.getOrDefault(sum[i] - k , 0);
hash.put(sum[i] ,hash.getOrDefault(sum[i],0)+1);
}
return res ;
}
}