题目:
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。
子数组是数组中元素的连续非空序列。
示例 1:
输入:nums = [1,1,1], k = 2
输出:2
示例 2:
输入:nums = [1,2,3], k = 3
输出:2
答案:
# coding:utf-8
# 时间:2024/3/15 13:57
# Pythonit教程网(blog.pythonit.cn)
# Python全栈视频课件获取:www.dqu.cc
# 加速高防cdn:woaiyundun.cn
def subarraySum(nums, k):
prefix_sum = {0: 1} # 初始化哈希表,前缀和为0的次数为1
count = 0 # 初始化满足条件的子数组个数为0
current_sum = 0 # 初始化当前位置之前的元素和为0
for num in nums:
current_sum += num # 更新当前位置之前的元素和
if current_sum - k in prefix_sum:
count += prefix_sum[current_sum - k] # 如果存在键为current_sum - k的项,则加到count上
prefix_sum[current_sum] = prefix_sum.get(current_sum, 0) + 1 # 更新哈希表中当前前缀和的次数
return count
nums = [1, 1, 1]
k = 2
print(subarraySum(nums, k)) # 输出: 2
nums = [1, 2, 3]
k = 3
print(subarraySum(nums, k)) # 输出: 2