From 5593f3e2c7e94b81e5bd8136e46cb252e2727924 Mon Sep 17 00:00:00 2001 From: yi-ge Date: Fri, 15 May 2020 19:25:33 +0800 Subject: [PATCH] =?UTF-8?q?add:=20=E5=92=8C=E4=B8=BAK=E7=9A=84=E5=AD=90?= =?UTF-8?q?=E6=95=B0=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 1 + README.md | 5 +++++ src/math/subarray-sum-equals-k.js | 25 +++++++++++++++++++++++++ test/math/subarray-sum-equals-k.test.js | 5 +++++ 4 files changed, 36 insertions(+) create mode 100644 src/math/subarray-sum-equals-k.js create mode 100644 test/math/subarray-sum-equals-k.test.js diff --git a/.vscode/settings.json b/.vscode/settings.json index de519b9..c8dd357 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -14,6 +14,7 @@ "nums", "powx", "pwwkew", + "subarray", "umghlrlose", "xuan", "zhong", diff --git a/README.md b/README.md index ba1cc1c..cdd4dd0 100644 --- a/README.md +++ b/README.md @@ -340,6 +340,11 @@ LeetCode 与 LintCode 解题记录。此为个人练习仓库,代码中对重 - LeetCode 50. Pow(x, n) - LintCode 428. x的n次幂 +- [和为K的子数组](src/math/subarray-sum-equals-k.js) + + - LeetCode 560. 和为K的子数组 + - LintCode 838. 子数组和为K + ## 堆 - [超级丑数](src/stack/super-ugly-number.js)【未完成】 diff --git a/src/math/subarray-sum-equals-k.js b/src/math/subarray-sum-equals-k.js new file mode 100644 index 0000000..c25f879 --- /dev/null +++ b/src/math/subarray-sum-equals-k.js @@ -0,0 +1,25 @@ +/** + * @param {number[]} nums + * @param {number} k + * @return {number} + */ +export const subarraySum = function (nums, k) { + const map = new Map() + let sum = 0 + let res = 0 + + nums.forEach((n, index) => { + sum += n + if (sum === k) res++ + const subSum = sum - k + let value = [] + if (map.has(subSum)) res += map.get(subSum).length + if (map.has(sum)) { + value = map.get(sum) + } + value.push(index) + map.set(sum, value) + }) + + return res +} diff --git a/test/math/subarray-sum-equals-k.test.js b/test/math/subarray-sum-equals-k.test.js new file mode 100644 index 0000000..7b9d63d --- /dev/null +++ b/test/math/subarray-sum-equals-k.test.js @@ -0,0 +1,5 @@ +import { subarraySum } from '../../src/math/subarray-sum-equals-k' + +test('和为K的子数组', () => { + expect(subarraySum([1, 1, 1], 2)).toBe(2) +})