其他分享
首页 > 其他分享> > LeetCode 560 和为 K 的子数组

LeetCode 560 和为 K 的子数组

作者:互联网

群里看到有人面微软的一面题。

第一种方式,暴力解,二重循环查找sum=k的。

第二种方式,刚看了题解也还是有点晕,主要思路就是前缀和+哈希表。重点是一次循环,边统计当前下标的前缀和 边查找符合要求的前缀和是否已经出现过,并且将出现的次数加到ans中。

第一种方式。

func subarraySum(nums []int, k int) int {
    ans := 0
    for left:=0;left<len(nums);left++ {
        sum :=0
        for right:=left;right>=0;right-- {
            sum+=nums[right]
            if sum==k {
                ans++
            }
        }
    }

    return ans
}

  第二种方式。

func subarraySum(nums []int, k int) int {
    ans := 0
    preSum := 0
    m := make(map[int]int, 0)
    m[0]=1
    for _, num := range nums {
        preSum+=num
        ans+=m[preSum-k]
        m[preSum]++
    }

    return ans
}

  

标签:前缀,nums,560,sum,int,数组,ans,preSum,LeetCode
来源: https://www.cnblogs.com/aboutblank/p/15894825.html