题目:
给定一个数组,寻找和为 k 的连续区间个数。
输入一个一维整数数组和一个整数值 k;输出一个整数,表示满足条件的连续区间个数。
思路:
使用一个哈希表 hashmap,其键是前缀和,而值是该前缀和出现的次数。在我们遍历到位置 i 时,假设当前的前缀和是 psum,那么 hashmap[psum-k]即为以当前位置结尾、满足条件的区间个数。
class Solution {
public int subarraySum(int[] nums, int k) {
int count = 0, pre = 0;
HashMap < Integer, Integer > mp = new HashMap<>();
mp.put(0,1);
for (int i = 0; i < nums.length; i++){
pre += nums[i];
if (mp.containsKey( pre - k)){
count += mp.get(pre - k);
}
mp.put(pre,mp.getOrDefault(pre,0) + 1);
}
return count;
}
}