Решение O (n) времени возможно путем объединения двух классических вопросов интервью:
Для этой проблемы нам в основном нужна очередь, которая поддерживает enqueue, dequeue и max в O (1) (амортизированном) времени .
Мы комбинируем два выше, путем моделирования очереди с двумя MaxStacks.
Чтобы решить вопрос, мы выставляем в очередь элементы k, запрашиваем max, dequeue, enqueue k + 1 th элемент, запросите max и т. д. Это даст вам максимальный размер для каждого массива размера k.
Я считаю, что есть и другие решения.
1)
Я считаю, что идея очереди может быть упрощена. Мы сохраняем очередь и max для каждого k. Мы вставляем новый элемент и декауруем все элементы, которые не больше, чем новый.
2) Поддерживайте два новых массива, которые поддерживают текущий макс для каждого блока k, один массив для одного направления (слева справа / справа налево).
3) Используйте молоток: предварительный процесс в O (n) времени для максимальных запросов диапазона.
1) решение выше может быть наиболее оптимальным .