【前缀和】和为 K 的连续子数组
文章目录
- 560. 和为 K 的连续子数组
- 解题思路:前缀和 + 哈希表

560. 和为 K 的连续子数组
560. 和为 K 的子数组
给你一个整数数组 nums
和一个整数 k
,请你统计并返回 该数组中和为 k
的连续子数组的个数 。
示例 1:
输入:nums = [1,1,1], k = 2
输出:2
示例 2:
输入:nums = [1,2,3], k = 3
输出:2
提示:
1 <= nums.length <= 2 * 104
-1000 <= nums[i] <= 1000
-107 <= k <= 107
解题思路:前缀和 + 哈希表
首先看到连续子数组,我们会想到用滑动窗口来解决这道题,但其实这道题用滑动窗口的话只能暴力破解,因为这道题 元素可能是负数或者为 0
,那么此时如果使用滑动窗口的话,会遗漏中间的一些情况,这都是因为滑动窗口的指针不会回退的原因,但如果要回退的话,时间复杂度就比较高了,所以这道题 无法使用滑动窗口来解决!
所以我们要换个思路,因为这道题也涉及到数组的连续和,所以可以考虑使用前缀和来解决这道题!
假设我们此时已经移动到了 i
位置处,那么我们要求就是从 [0, i]
区间达到目标值的子数组的个数。那么我们可以用一个数组 sum
来记录前缀和,即 sum[i]
表示从 [0, i]
区间上的元素和。
此时我们会发现,有可能我们要求的这个子数组不是从下标为 0
处开始的,