Вы вычисляете максимумы на каждой итерации (используя Math.max
), что дает квадратичный c временной алгоритм. Однако, как только у вас будет максимальная высота первых k зданий, вы можете обновлять его за постоянное время (последнее здание выше максимального?). Вы можете сделать максимальные значения справа налево аналогичным образом - это даст вам алгоритм линейного времени для проблемы.