# 560.和为K的子数组

# 题目

给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。

示例 1 :
输入:nums = [1,1,1], k =
输出: 2 , [1,1] 与 [1,1] 为两种不同的情况

# 个人题解

定义map{0:1}(边界条件),count计数,preSum来累加
通过在循环中preSum += nums[i] 我们可以得到,如果map[preSum-k]存在,那么说明这一次相加的值后累加的值满足了条件,那么我们的count即可相加一次

# 具体代码

var subarraySum = (nums, k) => {
  if (nums.length === 0) return 0
  let map = { 0: 1 }
  let prefixSum = 0
  let count = 0
  for (let i = 0; i < nums.length; i++) {
    prefixSum += nums[i]
    if (map[prefixSum - k]) {
      count += map[prefixSum - k];
    }
    if (map[prefixSum]) {
      map[prefixSum]++
    } else {
      map[prefixSum] = 1
    }
  }
  return count
}