class Solution(object):
def subarraySum(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: int
"""
# 前缀和+哈希表优化
# 使用哈希表,空间换时间
# 在遍历的过程中构建前缀和
# 使用哈希表或者字典记录每个前缀和出现的次数
# 把presum[i] - presum[j] == k --> 找presum[i]-k是否存在
# 用哈希表存已有的前缀和的值+次数
presum = 0
adict = {}
adict[0] = 1
count = 0
for i in range(len(nums)):
presum += nums[i]
if presum - k in adict:
count += adict[presum - k]
if presum not in adict:
adict[presum] = 1
else:
adict[presum] +=1
return count