Skip to content

Code:

js
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */

// 枚举 N*N
var subarraySum = function (nums, k) {
    let count = 0
    let length = nums.length

    while (length--) {
        let i = length
        let sum = 0

        while (i > -1) {
            sum += nums[i]

            if (sum === k) {
                count++
            }

            i--
        }
    }


    return count
};


// 前缀和
var subarraySum = function (nums, k) {
    let count = 0
    let prefixSum = 0
    const map = new Map([[0, 1]])

    for (const n of nums) {
        prefixSum += n
        const p = prefixSum - k

        if (map.has(p)) {
            count += map.get(p)
        }

        map.set(prefixSum, (map.get(prefixSum) || 0) + 1)
    }


    return count
};


console.log(subarraySum([1, 1, 1], 2))
console.log(subarraySum([-1, -1, 1], 0))
console.log(subarraySum([1, 2, 3], 3))
console.log(subarraySum([1,-1,0], 0))

❤ With Algorithm