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)
+})