essay
hot100-和为k的子数组个数
#算法
hot100——和为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
解
//核心:prefixSum[i]-prefixSum[j]=k,类似于两数之和
func subarraySum(nums []int, k int) int {
sumMap := make(map[int]int)
sumMap[0] = 1 // 前缀和为 0 出现 1 次(空子数组)
prefixSum := 0
result := 0
for _, v := range nums {
prefixSum += v
// 查找是否存在前缀和 = prefixSum - k
if count, ok := sumMap[prefixSum-k]; ok {
result += count
}
// ✅ 关键:累加当前前缀和的出现次数
sumMap[prefixSum]++
}
return result
}