Files
leetcode/apps/docs/content/(01-linear-structures)/prefix-sum/560_subarray-sum-equals-k.mdx
T

87 lines
2.3 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"
companies:
- { name: "Meta", period: "Thirty Days", frequency: 63.8 }
- { name: "Google", period: "Thirty Days", frequency: 50.2 }
- { name: "Visa", period: "Three Months", frequency: 80.9 }
- { name: "Bloomberg", period: "Three Months", frequency: 74.8 }
- { name: "Salesforce", period: "Three Months", frequency: 64.7 }
- { name: "Amazon", period: "Three Months", frequency: 57.1 }
- { name: "Microsoft", period: "Three Months", frequency: 48.3 }
- { name: "Accenture", period: "Six Months", frequency: 100 }
- { name: "IBM", period: "Six Months", frequency: 94.5 }
- { name: "Infosys", period: "Six Months", frequency: 76.3 }
- { name: "Apple", period: "Six Months", frequency: 74.7 }
- { name: "josh technology", period: "Six Months", frequency: 74 }
- { name: "Walmart Labs", period: "Six Months", frequency: 70.5 }
- { name: "Yandex", period: "Six Months", frequency: 69.2 }
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
};
```