Menu
CoddyTech

Trapping Rain Water

Ряд столбцов стоит бок о бок, каждый шириной в одну единицу: height[i] — высота столбца i. Дождевая вода скапливается в углублениях между столбцами. Вода остаётся над столбцом, только если где-то слева и где-то справа от него есть более высокий столбец; за первым и последним столбцами вода стекает. Верните общее количество единиц воды, которое удерживает ряд.

Функция

trap(height: integer-array) → integer
heightinteger-array
высота каждого столбца слева направо
Возвращаетinteger
общее количество единиц запертой воды

Ограничения

  • 1 ≤ height.length ≤ 2 × 104
  • 0 ≤ height[i] ≤ 105
  • Ширина каждого столбца составляет одну единицу, и вода не задерживается за первым или последним столбцом.

Примеры

Ввод
height = [0, 3, 1, 0, 2, 5, 1, 2]
Вывод
7
Пояснение
Между 3 и 5 уровень равен 3: 2 единицы над 1, 3 над 0, 1 над 2. Следующая 1 находится между 5 и 2, поэтому она означает 1. Получается 7.
challenge icon

Дополнительный вопрос

Предположим, что столбцы образуют двумерную сетку высот, и вода может вытекать во всех четырёх направлениях. Как бы вы тогда подсчитали объём запертой воды?

Сбросить код
def trap(height):
    # Напишите код здесь

Тест #1

Тест #2

Тест #3

Аргумент

height = [0, 3, 1, 0, 2, 5, 1, 2]

Ожидаемый вывод

7