今日题目

https://leetcode.com/problems/map-of-highest-peak/description/

思路

由于相邻格子之间高度差的绝对值最大为 1,且水域格子的高度为 0。 因此答案就是每个格子到最近水域格子的曼哈顿距离。

方法

使用 BFS 求每个格子到最近水域格子的曼哈顿距离。

复杂度

  • 时间复杂度:$O(NM)$,N、M 分别为网格的行数和列数。

  • 空间复杂度:$O(NM)$

代码

class Solution:
    def highestPeak(self, isWater: List[List[int]]) -> List[List[int]]:
        q = deque()
        ans = [[2005 for _ in range(len(isWater[0]))] for _ in range(len(isWater))]
        for i in range(len(isWater)):
            for j in range(len(isWater[0])):
                if isWater[i][j] == 1:
                    q.append((i,j))
                    ans[i][j] = 0
        
        dx = [0,0,1,-1]
        dy = [1,-1,0,0]

        while q:
            x,y = q.popleft()
            for i in range(4):
                nx = x + dx[i]
                ny = y + dy[i]
                if nx < 0 or ny < 0 or nx >= len(isWater) or ny >= len(isWater[0]) or ans[nx][ny] <= ans[x][y] + 1:
                    continue
                ans[nx][ny] = ans[x][y] + 1
                q.append((nx, ny))
        
        return ans