LeetCode 560. 和为K的子数组
给你一个整数数组 nums
和一个整数 k
,请你统计并返回 该数组中和为 k
的子数组的个数 。
子数组是数组中元素的连续非空序列。
示例 1:
输入:nums = [1,1,1], k = 2
输出:2
示例 2:
输入:nums = [1,2,3], k = 3
输出:2
代码:
class Solution(object):
def subarraySum(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: int
"""
from collections import defaultdict
res = 0
presum_map = defaultdict(int)
# 初始化前缀和为0的情况
presum_map[0] = 1
# 记录前缀和
presum = 0
for num in nums:
# 更新前缀和
presum += num
if presum - k in presum_map:
# 如果当前前缀和前去目标值k之后的前缀和在map中
res += presum_map[presum - k]
presum_map[presum] += 1
return res