Menu
CoddyTech

Sliding Window Maximum

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

Функция

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

Ограничения

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

Примеры

Ввод
nums = [4, 2, 12, 3, 8, 5, 1]k = 3
Вывод
[12, 12, 12, 8, 8]
Пояснение
12 входит в первые три окна, поэтому каждое из них отвечает 12. После того как он выйдет из окна, [3, 8, 5] и [8, 5, 1] имеют наибольшее значение 8.
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]