Menu
CoddyTech

Subarray Sum Equals K

Дан массив целых чисел nums и целое число k. Подсчитайте подмассивы, сумма элементов которых в точности равна k. Подмассив — это последовательность из одного или нескольких соседних элементов. Подмассивы считаются отдельно, если они начинаются или заканчиваются в разных позициях, даже если содержат одинаковые значения. Значения могут быть отрицательными или равными нулю.

Функция

subarraySum(nums: integer-array, k: integer) → integer
numsinteger-array
массив целых чисел, который может содержать отрицательные значения и нули
kinteger
сумма, которой должен достичь подмассив, чтобы его засчитали
Возвращаетinteger
количество подмассивов, сумма элементов которых равна k

Ограничения

  • 1 ≤ nums.length ≤ 2 × 104
  • -1000 ≤ nums[i] ≤ 1000
  • -107 ≤ k ≤ 107
  • У массива такой длины не более 200,010,000 подмассивов, поэтому ответ помещается в 32-разрядное знаковое целое число.

Примеры

Ввод
nums = [3, 4, -7, 1, 3, 3, 1, -4]k = 7
Вывод
4
Пояснение
Четыре последовательности в сумме дают 7: [3, 4], [1, 3, 3], [3, 3, 1] и [3, 4, -7, 1, 3, 3]. В последней последовательности -7 компенсирует 3 и 4, и позднее сумма снова достигает 7, поэтому последовательность может подойти, даже если её сумма уже превысила k.

lock icon+17 скрытых тестов при отправке

challenge icon

Дополнительный вопрос

Как изменить решение, чтобы оно возвращало длину самого длинного подмассива, сумма элементов которого равна k, по-прежнему за время O(n)?

Сбросить код
def subarraySum(nums, k):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Случай 3

Ввод

nums = [3, 4, -7, 1, 3, 3, 1, -4]
k = 7

Ожидается

4