LeetCode百题【和为 K 的子数组】
题目描述
给你一个整数数组 nums
和一个整数 k
,请你统计并返回 该数组中和为 k
的连续子数组的个数 。
示例 1:
1 |
|
示例 2:
1 |
|
提示:
1 <= nums.length <= 2 * 10^4
-1000 <= nums[i] <= 1000
-10^7 <= k <= 10^7
解法
- 前缀和+哈希表
- 定义
pre[i]
为[0.....i]
里所有数的和 则有递推公式pre[i]=pre[i-1]+nums[i]
- 那么
[j....i]
和为k的的子数组条件可以转化为pre[i]-pre[j-1]=k
- 简单移项得:
pre[j-1]=pre[i]-k
- 定义
- 所以我们考虑以i结尾的和为k的连续子数组个数时只要统计有多少个前缀和为
pre[i]-k
的pre[j]
即可 - 我们建立哈希表以和为键,出现次数为对应的值,记录 pre[i] 出现的次数,从左往右边更新哈希表边计算答案
1 |
|
- 时间复杂度:O(n)
来源:力扣(LeetCode)
链接:560. 和为 K 的子数组 - 力扣(LeetCode)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 漫漫长夜!