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
}
comments如果有不同意见或者补充,直接留在这里。
contact

在别处继续找到我

如果你想聊技术、设计,或者只是打个招呼。

暂未配置外部链接