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