mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
72 lines
1.4 KiB
Plaintext
72 lines
1.4 KiB
Plaintext
---
|
|
title: '560. Subarray Sum Equals K'
|
|
description: Given an array of integers nums and an integer k, return the total number of subarrays whose sum equals to k
|
|
icon: dot
|
|
topics:
|
|
- { name: "Array", slug: "array" }
|
|
- { name: "Hash Table", slug: "hash-table" }
|
|
- { name: "Prefix Sum", slug: "prefix-sum" }
|
|
video: "fFVZt-6sgyo"
|
|
issue: "https://github.com/prdlk/leetcode/issues/38"
|
|
sidebar:
|
|
label: 'Subarray Sum Equals K'
|
|
badge: 'Medium'
|
|
---
|
|
|
|
### Example 1:
|
|
- Input: `nums = [1,1,1], k = 2`
|
|
- Output: `2`
|
|
|
|
### Example 2:
|
|
- Input: `nums = [1,2,3], k = 3`
|
|
- Output: `2`
|
|
|
|
### Constraints:
|
|
|
|
- `1 <= nums.length <= 2 * 10^4`
|
|
- `-1000 <= nums[i] <= 1000`
|
|
- `-10^7 <= k <= 10^7`
|
|
|
|
## Approach
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
S(["subarraySum(nums, k)"]) --> I["map = {0: 1} — the empty prefix; sum = 0, count = 0"]
|
|
I --> L{"more n in nums?"}
|
|
L -- no --> E(["return count"])
|
|
L -- yes --> A["sum += n"]
|
|
A --> Q{"map has sum - k?"}
|
|
Q -- yes --> C["count += map.get(sum - k) — every earlier prefix that closes a window"]
|
|
Q -- no --> W["map.set(sum, count of sum + 1)"]
|
|
C --> W
|
|
W --> L
|
|
```
|
|
|
|
## Solution
|
|
|
|
```js
|
|
/**
|
|
* @param {number[]} nums
|
|
* @param {number} k
|
|
* @return {number}
|
|
*/
|
|
var subarraySum = function(nums, k) {
|
|
const map = new Map();
|
|
map.set(0, 1);
|
|
|
|
let sum = 0;
|
|
let count = 0;
|
|
|
|
for (let n of nums){
|
|
sum += n;
|
|
|
|
if(map.has(sum - k)){
|
|
count += map.get(sum - k);
|
|
}
|
|
|
|
map.set(sum, (map.get(sum) || 0) + 1);
|
|
}
|
|
return count
|
|
};
|
|
```
|