add: 和为K的子数组

This commit is contained in:
yi-ge 2020-05-15 19:25:33 +08:00
parent d348c63824
commit 5593f3e2c7
4 changed files with 36 additions and 0 deletions

View File

@ -14,6 +14,7 @@
"nums",
"powx",
"pwwkew",
"subarray",
"umghlrlose",
"xuan",
"zhong",

View File

@ -340,6 +340,11 @@ LeetCode 与 LintCode 解题记录。此为个人练习仓库,代码中对重
- LeetCode 50. Pow(x, n) <https://leetcode-cn.com/problems/powx-n/>
- LintCode 428. x的n次幂 <https://www.lintcode.com/problem/powx-n/>
- [和为K的子数组](src/math/subarray-sum-equals-k.js)
- LeetCode 560. 和为K的子数组 <https://leetcode-cn.com/problems/subarray-sum-equals-k/>
- LintCode 838. 子数组和为K <https://www.lintcode.com/problem/subarray-sum-equals-k/>
## 堆
- [超级丑数](src/stack/super-ugly-number.js)【未完成】

View File

@ -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
}

View File

@ -0,0 +1,5 @@
import { subarraySum } from '../../src/math/subarray-sum-equals-k'
test('和为K的子数组', () => {
expect(subarraySum([1, 1, 1], 2)).toBe(2)
})