
求解代码
java
public int subarraySum(int[] nums, int k) {
// 哈希表:key=前缀和,value=该前缀和出现的次数
HashMap<Integer, Integer> map = new HashMap<>();
int sum = 0; // 记录当前遍历到的前缀和
int ans = 0;
// 初始化前缀和为0的情况出现了1次
map.put(0, 1);
for (int i = 0; i < nums.length; i++) {
sum += nums[i]; // 累加当前元素,得到当前前缀和sum
// 查找是否存在sum - k,存在则累加次数到结果
if (map.containsKey(sum - k)) {
ans += map.get(sum - k);
}
// 将当前前缀和存入哈希表:若已存在则次数+1,否则设为1
map.put(sum, map.getOrDefault(sum, 0) + 1);
}
return ans;
}