Mediumtwo-pointers

Решить задачу Container With Most Water (LeetCode 11)?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

LeetCode 11. Найти два столбца, между которыми максимум воды: water = min(h[i], h[j]) * (j - i). Two pointers: двигаем тот, что меньше. O(n) время, O(1) память.

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

Почему двигаем меньший: ширина всегда уменьшается, а ограничивающая высота равна меньшему столбцу — двигая больший, мы не сможем увеличить высоту, значит максимум не улучшится. Двигая меньший, можем найти более высокую границу. Brute force — O(n²) проверка всех пар.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.