【leetcode】560. 和为 K 的子数组

62 阅读1分钟

leetcode-560.png

需要连续的数字才行
题解:这里采用前缀和来解决这一题

注意第八行,这里判断的是前缀和 sum - k,如果存在sum - k的前缀和,此时又存在 sum的前缀和,那么相差的k肯定也存在

var subarraySum = function (nums, k) {
    let hash = new Map()
    hash.set(0, 1)  // 前缀和为 0 的次数为 1
    let sum = 0
    let count = 0
    for (let num of nums) {
        sum += num
        // 此处判断是前缀和 sum - k
        if (hash.get(sum - k)) {
            count += hash.get(sum - k)
        }
        hash.set(sum, (hash.get(sum) || 0) + 1)
    }
    return count
};