Улавливание воды в двумерной матрице, подвешенной в космосе - PullRequest
0 голосов
/ 07 марта 2019

Учитывая матрицу положительных целых чисел mxn, представляющую высоту каждой элементарной ячейки на двумерной карте высот, подвешенных в пространстве, вычислите объем воды, который она может поймать после неограниченной подачи воды сверху.0 представляет утечку (матрица подвешена в пространстве). Примечание:

И m, и n меньше 110. Высота каждой элементарной ячейки больше 0 и меньше 20 000.есть список списков, где 0 в подсписках представляет утечку.Ниже описан пример:

[[3, 3, 3, 3, 5, 3],
[3, 0, 2, 3, 1, 3],
[3, 1, 2, 3, 1, 3],
[3, 3, 3, 1, 3, 3]]
ans = 4

Мы можем заполнить только 4 единицы воды в этом случае.Это 2 единицы в обеих единицах в 5-м столбце, потому что, если заполнить более 2 единиц, он переполнится.в то время как вода в левой долине, слева от колонн от 0 до 3, протекает через 0.

Например, 2

 [[1,4,3,1,3,2],
  [3,2,1,3,2,4],
  [2,3,3,2,3,1]]

Ans = 4 Как действовать?
Нижелогика лечения 0 как на земле.Я хочу изменить это для случая 0, представляющего утечку / дренаж.

def trapRainWater(self, heightMap):
    """
    :type heightMap: List[List[int]]
    :rtype: int
    """
    m = len(heightMap)
    if not m:
        return 0
    n = len(heightMap[0])
    if not n:
        return 0

    is_visited = [[False for i in xrange(n)] for j in xrange(m)]

    heap = []
    for i in xrange(m):
        heappush(heap, [heightMap[i][0], i, 0])
        is_visited[i][0] = True
        heappush(heap, [heightMap[i][n-1], i, n-1])
        is_visited[i][n-1] = True
    for j in xrange(n):
        heappush(heap, [heightMap[0][j], 0, j])
        is_visited[0][j] = True
        heappush(heap, [heightMap[m-1][j], m-1, j])
        is_visited[m-1][j] = True

    trap = 0
    while heap:
        height, i, j = heappop(heap)
        for (dx, dy) in [(1,0), (-1,0), (0,1), (0,-1)]:
            x, y = i+dx, j+dy
            if 0 <= x < m and 0 <= y < n and not is_visited[x][y]:
                trap += max(0, height - heightMap[x][y])
                heappush(heap, [max(height, heightMap[x][y]), x, y])
                is_visited[x][y] = True

    return trap
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...