# Билет 04 — рабочий лист

## Условие

Дан массив целых чисел `nums` и целое число `k`. Верните **количество** непрерывных подмассивов, сумма элементов которых равна `k`. Подмассив — непустая последовательность подряд идущих элементов; порядок менять нельзя, разные позиции/длины считаются раздельно.

```
Input:  nums = [1,1,1], k = 2  →  Output: 2   (подмассивы [1,1] на позициях 0–1 и 1–2)
Input:  nums = [1,2,3], k = 3  →  Output: 2   ([1,2] и [3])
Input:  nums = [1,-1,0], k = 0 →  Output: 3   ([1,-1], [0], [1,-1,0])
```

Constraints: `1 <= nums.length <= 2 * 10^4`; `-10^3 <= nums[i] <= 10^3`; `-10^7 <= k <= 10^7`.

## Решение — пиши здесь

```ruby
#
# Твоя реализация. Не забудь: проговаривай (пиши в комментариях) —
# 1) идею, 2) сложность по времени, 3) сложность по памяти,
# 4) граничные случаи.
#

def subarray_sum(nums, k)
  result = 0
  freq = Hash.new(0)
  sum = 0

  freq[0] = 1

  nums.each do |num|
    sum += num

    result += freq[sum - k]

    freq[sum] += 1
  end

  result
end
```

run: O(n)
mem: min(O(1)), max(O(n))
