# 和为 K 的子数组

  1. 和为 K 的子数组

来源:力扣(LeetCode) 链接 (opens new window):https://leetcode.cn/problems/subarray-sum-equals-k/ 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

github (opens new window)

# 问题

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数

输入:nums = [1,1,1], k = 2
输出:2
输入:nums = [1,2,3], k = 3
输出:2

# 思路

// 思路:前缀和

var subarraySum = function (nums, k) {
  //前缀和数组
  let presum = [nums[0]];
  for (let i = 0; i < nums.length; i++) {
    //这里需要注意,我们的前缀和是presum[1]开始填充的
    presum[i + 1] = nums[i] + presum[i];
  }
  //统计个数
  let count = 0;
  for (let i = 0; i < nums.length; ++i) {
    for (let j = i; j < nums.length; ++j) {
      //注意偏移,因为我们的nums[2]到nums[4]等于presum[5]-presum[2]
      //所以这样就可以得到nums[i,j]区间内的和
      if (presum[j + 1] - presum[i] == k) {
        count++;
      }
    }
  }

  return count;
};

# 参考

陕ICP备20004732号-3