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, поэтому уровень воды над ним равен 2, и он удерживает 1 единицу. 2 + 3 + 1 + 1 = 7.

lock icon+17 скрытых тестов при отправке

challenge icon

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

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

Сбросить код
def trap(height):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Случай 3

Ввод

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

Ожидается

7