1162. As Far from Land as Possible
Description
Given an n x n
grid
containing only values 0
and 1
, where 0
represents water and 1
represents land, find a water cell such that its distance to the nearest land cell is maximized, and return the distance. If no land or water exists in the grid, return -1
.
The distance used in this problem is the Manhattan distance: the distance between two cells (x0, y0)
and (x1, y1)
is |x0 - x1| + |y0 - y1|
.
Example 1:
Input: grid = [[1,0,1],[0,0,0],[1,0,1]] Output: 2 Explanation: The cell (1, 1) is as far as possible from all the land with distance 2.
Example 2:
Input: grid = [[1,0,0],[0,0,0],[0,0,0]] Output: 4 Explanation: The cell (2, 2) is as far as possible from all the land with distance 4.
Constraints:
n == grid.length
n == grid[i].length
1 <= n <= 100
grid[i][j]
is0
or1
Solution
as-far-from-land-as-possible.py
class Solution:
def maxDistance(self, grid: List[List[int]]) -> int:
rows, cols = len(grid), len(grid[0])
queue = deque([(x, y) for x in range(rows) for y in range(cols) if grid[x][y] == 1])
if len(queue) == 0 or len(queue) == rows * cols: return -1
distance = 0
while queue:
n = len(queue)
for _ in range(n):
x, y = queue.popleft()
for dx, dy in [(x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)]:
if 0 <= dx < rows and 0 <= dy < cols and grid[dx][dy] == 0:
queue.append((dx, dy))
grid[dx][dy] = 1
distance += 1
return distance - 1