---
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
sidebar:
  label: 'Subarray Sum Equals K'
  badge: 'Medium'
---

Array

### 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
};
```

## Explanation

[Subarray Sum Equals K - Prefix Sums - Leetcode 560 - Python](https://www.youtube.com/watch?v=fFVZt-6sgyo)
