Python

Добрый день, помогите реализовать на Python или C#

Имея n неотрицательных целых чисел, представляющих карту высот, где ширина каждой полосы равна 1, вычислите, сколько воды она может собрать после дождя. Например: Ввод: высота = [4,2,0,3,2,5] Выход: 9
Пояснение: В этом случае общее количество дождевой воды (синяя секция), которое может захватить контейнер, составляет 6 + 1 + 2 = 9.защита от дождевой воды (высота): n = len(высота) leftMax = [0] * n rightMax = [0] * n leftMax[0] = высоты[0] для i в диапазоне(1, n): leftMax[i] = max(leftMax[i - 1], высота[i]) справа Max[n - 1] = высоты[n - 1] для i в диапазоне(n - 2, -1, -1): rightMax[i] = max(rightMax[i + 1], высота[i]) результат = 0 для i в диапазоне(n): результат += min(leftMax[i], rightMax[i]) - высота[i] возвращает результат Примечание что вы можете использовать один и тот же цикл для одновременного обновления leftMax и rightMax. Это сократит количество циклов до одного. def trap(self, height): height_len = len(высота) leftMax, rightMax = [0] * height_len, [0] * height_len leftMax[0]= высота[0] rightMax[height_len - 1] = высота[height_len - 1] для i в диапазоне(1, height_len): leftMax[i] = max(leftMax[i - 1], высота[i]) для i в диапазоне(height_len - 2, -1, -1): rightMax[i] = max(rightMax[i + 1], высота[i]) результат = 0 для i в диапазоне(height_len): результат += min(leftMax[i], rightMax[i]) - высота[i] возвращаемый результат Мы создаем двумерную матрицу для хранения максимальной высоты слева и справа от текущей позиции. Максимальное количество дождевой воды равно минимуму максимального левого и максимального правого минус текущая высота.def trap2(self, height): height_len = len(высота) max_height = [[0 для _ в диапазоне(height_ len)] для _ в диапазоне(2)] max_height[0][0]= высота[0] для i в диапазоне(1, height_len): max_height[0][i] = max(max_height[0][i - 1], высота[i]) max_height[1][height_len - 1] = высота[height_len - 1] для i в диапазоне(height_len - 2, -1, -1): max_height[1][i] = max(max_height[1][i + 1], height[i]) результат = 0 для i в диапазоне(height_len): результат += min(max_height[0][i], max_height[1][i]) - высота[i] возвращаемый результат Мы используем два стека для хранения максимальной высоты левой и правой сторон. Мы перебираем весь массив и добавляем в стек каждый раз, когда сталкиваемся с высотой, которая больше или равна текущей высоте стека. Если мы сталкиваемся с высотой, которая меньше высоты штабеля, это означает, что существует потенциальная зона хранения дождевой воды. Максимальное количество
Bakyt Tagaibekov
Bakyt Tagaibekov
220
Лучший ответ