/**
 *  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;
}