• Как обойти ошибку "Превышен лимит памяти"?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    1. Чтобы найти максимум, не надо запоминать все значения, достаточно помнить максимальное.
    2. Эта задача решается гораздо проще со сложностью O(n), а не O(n2), как у вас.
    Берём два крайних отрезка (left = 0 и right = n-1), вычисляем площадь прямоугольника (right - left) * min(length[left], length[right]).
    Учитывая, что при сдвиге границ к центру расстояние (right - left) уменьшается, для увеличения площади необходимо увеличение min(length[left], length[right]). Поэтому берём ту границу left или right, длина отрезка для которой меньше, и начинаем двигать к центру, пока длина нового отрезка не станет больше предыдущей (length[left'] > length[left] или length[right'] > length[right]).
    Вычисляем новую площадь. Если она больше предыдущей, запоминаем положения отрезков. Повторяем процедуру сдвигания.
    Ответ написан
    Комментировать