diff --git a/README.md b/README.md
index c0849c3..96258db 100644
--- a/README.md
+++ b/README.md
@@ -353,6 +353,10 @@ LeetCode 与 LintCode 解题记录。此为个人练习仓库,代码中对重
- LeetCode 287. 寻找重复数
- LintCode 633. 寻找重复的数
+- [和可被K整除的子数组](src/array/subarray-sums-divisible-by-k.js)
+
+ - LeetCode 974. 和可被 K 整除的子数组
+
## 栈
- [最大矩阵](src/stack/maximal-rectangle.js)
diff --git a/src/array/subarray-sums-divisible-by-k.js b/src/array/subarray-sums-divisible-by-k.js
new file mode 100644
index 0000000..1d27434
--- /dev/null
+++ b/src/array/subarray-sums-divisible-by-k.js
@@ -0,0 +1,17 @@
+/**
+ * @param {number[]} A
+ * @param {number} K
+ * @return {number}
+ */
+export const subarraysDivByK = function (A, K) {
+ const map = new Map([[0, 1]]); let sum = 0; let count = 0
+
+ A.forEach(n => {
+ sum = (sum + n) % K; sum = sum < 0 ? sum + K : sum
+ const temp = map.get(sum) || 0
+ count += temp
+ map.set(sum, temp + 1)
+ })
+
+ return count
+}
diff --git a/test/math/coin-lcci.test.js b/src/list/math/coin-lcci.test.js
similarity index 100%
rename from test/math/coin-lcci.test.js
rename to src/list/math/coin-lcci.test.js
diff --git a/test/math/factorial-trailing-zeroes.test.js b/src/list/math/factorial-trailing-zeroes.test.js
similarity index 100%
rename from test/math/factorial-trailing-zeroes.test.js
rename to src/list/math/factorial-trailing-zeroes.test.js
diff --git a/test/math/maximum-lcci.test.js b/src/list/math/maximum-lcci.test.js
similarity index 100%
rename from test/math/maximum-lcci.test.js
rename to src/list/math/maximum-lcci.test.js
diff --git a/test/math/median-of-two-sorted-arrays.test.js b/src/list/math/median-of-two-sorted-arrays.test.js
similarity index 100%
rename from test/math/median-of-two-sorted-arrays.test.js
rename to src/list/math/median-of-two-sorted-arrays.test.js
diff --git a/test/math/palindrome-number.test.js b/src/list/math/palindrome-number.test.js
similarity index 100%
rename from test/math/palindrome-number.test.js
rename to src/list/math/palindrome-number.test.js
diff --git a/test/math/perfect-number.test.js b/src/list/math/perfect-number.test.js
similarity index 100%
rename from test/math/perfect-number.test.js
rename to src/list/math/perfect-number.test.js
diff --git a/test/math/permutations.test.js b/src/list/math/permutations.test.js
similarity index 100%
rename from test/math/permutations.test.js
rename to src/list/math/permutations.test.js
diff --git a/test/math/powx-n.test.js b/src/list/math/powx-n.test.js
similarity index 100%
rename from test/math/powx-n.test.js
rename to src/list/math/powx-n.test.js
diff --git a/test/math/subarray-sum-equals-k.test.js b/src/list/math/subarray-sum-equals-k.test.js
similarity index 100%
rename from test/math/subarray-sum-equals-k.test.js
rename to src/list/math/subarray-sum-equals-k.test.js
diff --git a/test/math/ugly-number-ii.test.js b/src/list/math/ugly-number-ii.test.js
similarity index 100%
rename from test/math/ugly-number-ii.test.js
rename to src/list/math/ugly-number-ii.test.js
diff --git a/test/array/subarray-sums-divisible-by-k.test.js b/test/array/subarray-sums-divisible-by-k.test.js
new file mode 100644
index 0000000..f67a4b4
--- /dev/null
+++ b/test/array/subarray-sums-divisible-by-k.test.js
@@ -0,0 +1,5 @@
+import { subarraysDivByK } from '../../src/array/subarray-sums-divisible-by-k'
+
+test('和可被K整除的子数组', () => {
+ expect(subarraysDivByK([4, 5, 0, -2, -3, 1], 5)).toBe(7)
+})