mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 21:22:43 +00:00
87 lines
2.3 KiB
Plaintext
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
|
|
};
|
|
```
|