/**
* map缓存前缀和,当前前缀和-目标值 在map中有出现,说明有连续区间前缀和出现
* map.put(0, 1);处理nums[i] = k情况
* */
public int subarraySum(int[] nums, int k) {
int count = 0;
HashMap<Integer, Integer> map = new HashMap<>();
int preSum[] = new int[nums.length + 1];
map.put(0, 1);
for (int i = 1; i < nums.length + 1; i++) {
preSum[i] += preSum[i - 1] + nums[i - 1];
if (map.containsKey(preSum[i] - k)) {
count += map.getOrDefault(preSum[i] - k, 0);
}
map.put(preSum[i], map.getOrDefault(preSum[i], 0) + 1);
}
return count;
}
LeetCode题解
- # 算法
560. 和为 K 的子数组
1 mins.
647
0
评论区