free-programming-books icon indicating copy to clipboard operation
free-programming-books copied to clipboard

Array-解题:和为K的子数组(NO.560)

Open meibin08 opened this issue 6 years ago • 1 comments

给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。

  • 示例 1 :
输入:nums = [1,1,1], k = 2
输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。
  • 说明 : 数组的长度为 [1, 20,000]。 数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。

原题链接:https://leetcode-cn.com/problems/subarray-sum-equals-k/

meibin08 avatar Apr 09 '19 13:04 meibin08

  • js解题思路:
var subarraySum = function (nums, k) {
    let result = 0;
    for (let i = 0; i < nums.length; i++) {

        nums.slice(i).reduce((total, cur) => {
            let item = total + cur;
            if (item == k) {
                result += 1;
            } ;
            return item;
        }, 0)

    };
    return (result);
};
  • 思路2:

var subarraySum = function (nums, k) {
    let result = 0;
    let sum = 0;
    let map = {
        0: 1
    };
    for (let i = 0; i < nums.length; i++) {
        sum += nums[i];
        let part = sum - k;
        if (!!map[part]) {
            result += map[part];
        };
        if (!map[sum]) {
            map[sum] = 1;
        } else {
            map[sum] += 1;
        };
    };
    return (result);
};

meibin08 avatar Apr 09 '19 14:04 meibin08