题目链接
思路:前缀和+hash表
每次去map中找前面是否出现过当前元素所需要的值(也就是当前元素距离k的值)。
加上所需要的值出现的次数(这个次数可能是0次)。
然后再把自己给放进map中。次数要加1
注意,mao中要提前放入0,次数是1,因为当前元素如果等于k,那么当前元素和k就相差0,所以0默认出现了1次。
代码:
class Solution {
public int subarraySum(int[] nums, int k) {
HashMap<Integer, Integer> map = new HashMap<>();
int res = 0;
//前缀和
for(int i = 1; i < nums.length;i++){
nums[i] = nums[i] + nums[i-1];
}
map.put(0,1);
for(int i = 0;i < nums.length;i++){
int count = map.getOrDefault(nums[i]-k,0);
res = res + count;
map.put(nums[i],map.getOrDefault(nums[i],0)+1);
}
return res;
}
}