free-programming-books
free-programming-books copied to clipboard
Array-解题:和为K的子数组(NO.560)
给定一个整数数组和一个整数 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/
- 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);
};