Дан целочисленный массив height длины n. Проведены n вертикальных линий, при этом два конца i-й линии находятся в точках (i, 0) и (i, height[i]).

Поставьте указатели на крайние линии, вычисляйте площадь и двигайте указатель у меньшей высоты. Так находится максимум за O(n) времени и O(1) дополнительной памяти.

Короткий ответ

Что ответить на собеседовании

Поставьте указатели на крайние линии, вычисляйте площадь и двигайте указатель у меньшей высоты. Так находится максимум за O(n) времени и O(1) дополнительной памяти.

Подробный разбор

Ответ с пояснениями

Условие

Дан целочисленный массив height длины n. Проведены n вертикальных линий, при этом два конца i-й линии находятся в точках (i, 0) и (i, height[i]).

Найдите две линии, которые вместе с осью абсцисс (осью x) образуют контейнер, вмещающий максимальное количество воды.

Верните максимальный объём воды, который может вместить такой контейнер.

Обратите внимание, что наклонять контейнер нельзя.

Пример 1:

Ввод: height = [1,8,6,2,5,4,8,3,7] Вывод: 49 Объяснение: Указанные вертикальные линии представлены массивом [1,8,6,2,5,4,8,3,7]. В этом случае максимальная площадь воды (синяя область), которую может вместить контейнер, равна 49.

Пример 2:

Ввод: height = [1,1] Вывод: 1

Ограничения:

n == height.length 2 <= n <= 10^5 0 <= height[i] <= 10^4

Ответ

Поставьте указатели на крайние линии, вычисляйте площадь и двигайте указатель у меньшей высоты. Так находится максимум за O(n) времени и O(1) дополнительной памяти.

def max_area(height):
    left, right = 0, len(height) - 1
    best = 0
    while left < right:
        best = max(best, (right - left) * min(height[left], height[right]))
        if height[left] <= height[right]:
            left += 1
        else:
            right -= 1
    return best

При фиксированной меньшей границе движение другой только уменьшает ширину и не может увеличить минимальную высоту. Поэтому меньшую границу можно безопасно отбросить; при равенстве — любую. Для первого примера получаем 7 × 7 = 49.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее