560. 和为 K 的子数组

思路

  本题的主要思路为创建一个哈希表记录每个0~i的和,在遍历这个数组的时候查询有没有sum-k的值在哈希表中,如果有,说明有个位置到当前位置的和为k。
在这里插入图片描述
  有可能不止一个,哈希表负责记录有几个sum-k,将和记录下来。这里把每个以i结尾的结果都算上了,所以不用担心不全等问题。
  这里需要注意的两个点为:

  1. m[0]=1;提前在哈希表注册一个0的结果,因为如果刚好是0到当前i的话,需要有一个记录被算上。
  2. m[sum]++这行代码放的位置,有个简单的方法来判断会不会影响当前i计算的结果,那就是加到当前的和为0,k也为0,如果你放在前面的话就会算上这个结果,但是当前i到当前i是没有元素的,不算一种结果,但是你加上了这个结果,是错误的,有影响的。

代码示例

func subarraySum(nums []int, k int) int {
    result:=0
    m:=make(map[int]int)
    m[0]=1
    sum:=0
    for i:=0;i<len(nums);i++{
        sum+=nums[i]
        if val,ok:=m[sum-k];ok{
            result+=val
        }
        m[sum]++
    }

    return result
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值