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.
challenge icon

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

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

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

Тест #1

Тест #2

Тест #3

Аргументы

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

Ожидаемый вывод

4