Menu
CoddyTech

Sliding Window Maximum

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

Верните массив, содержащий наибольшее значение внутри окна для каждой его позиции, слева направо. В массиве длины n есть n-k+1 окон, поэтому результат содержит n-k+1 значений.

Функция

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

Ограничения

  • 1 ≤ k ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • Результат содержит nums.length-k+1 значений — по одному на каждое окно, в порядке слева направо.

Примеры

Ввод
nums = [4, 2, 12, 3, 8, 5, 1]k = 3
Вывод
[12, 12, 12, 8, 8]
Пояснение
12 находится в первых трёх окнах: [4, 2, 12], [2, 12, 3] и [12, 3, 8]. После того как оно выходит из окна, в окнах [3, 8, 5] и [8, 5, 1] наибольшим значением является 8.

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

challenge icon

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

Сможешь создать очередь, которая поддерживает добавление значения в конец, удаление значения из начала и чтение текущего максимума за амортизированное время O(1)?

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

Случай 1

Случай 2

Случай 3

Ввод

nums = [4, 2, 12, 3, 8, 5, 1]
k = 3

Ожидается

[12, 12, 12, 8, 8]