Как найти максимум каждого подмассива некоторой фиксированной заданной длины в данном массиве

Нам дан массив из n элементов и целое число k. Предположим, мы хотим переместить окно длиной k по массиву, сообщая о наибольшем значении, содержащемся в каждом окне. Например, для массива

15  10   9  16  20  14  13

При длине окна 4 мы должны вывести

[15  10   9  16] 20  14  13   ---> Output 16
 15 [10   9  16  20] 14  13   ---> Output 20
 15  10 [ 9  16  20  14]  13  ---> Output 20
 15  10   9 [16  20  14  13]  ---> Output 20

Таким образом, результат будет

16  20  20  20

. Я подходил к проблеме, отслеживая максимальный элемент окна в каждой точке, но столкнулся с проблемой, когда самый большой элемент выскользнул из окна. В тот момент я не мог придумать быстрого способа выяснить, какой из оставшихся элементов наибольший.

Кто-нибудь знает эффективный алгоритм для решения этой проблемы?

10
задан templatetypedef 31 August 2011 в 00:40
поделиться