As Far from Land as Possible 1 minute read 1162. As Far from Land as Possible BFS Python class Solution: def maxDistance(self, grid: List[List[int]]) -> int: N = len(grid) q = collections.deque() def get_neighbors(x, y): ret = [] for xx, yy in ((-1, 0), (1, 0), (0, -1), (0, 1)): if 0 <= x + xx < N and 0 <= y + yy < N: ret.append((x + xx, y + yy)) return ret for i in range(N): for j in range(N): if grid[i][j] == 1: for ii, jj in get_neighbors(i, j): if grid[ii][jj] == 0: q.append((ii, jj, 1)) ret = -1 while q: i, j, dist = q.popleft() if grid[i][j] != 0: continue grid[i][j] = dist ret = max(ret, dist) for ii, jj in get_neighbors(i, j): q.append((ii, jj, dist+1)) return ret Java class Solution { int gridSize; public int maxDistance(int[][] grid) { this.gridSize = grid.length; Queue<Triplet> q = new ArrayDeque<Triplet>(); for (int i = 0; i < gridSize; ++i) { for (int j = 0; j < gridSize; ++j) { if (grid[i][j] == 1) { for (List<Integer> l: this.getNeighbors(i, j)) { q.add(new Triplet(l.get(0), l.get(1), 1)); } } } } int ret = -1; while (!q.isEmpty()) { Triplet t = q.remove(); int i = t.arr[0], j = t.arr[1], dist = t.arr[2]; if (grid[i][j] != 0) continue; grid[i][j] = dist; for (List<Integer> tmp: this.getNeighbors(i, j)) { q.add(new Triplet(tmp.get(0), tmp.get(1), dist + 1)); ret = Math.max(ret, dist); } } return ret; } private List<List<Integer>> getNeighbors(int i, int j) { List<List<Integer>> ret = new ArrayList<>(); if (i + 1 < gridSize) ret.add(Arrays.asList(i+1, j)); if (i - 1 >= 0) ret.add(Arrays.asList(i-1, j)); if (j + 1 < gridSize) ret.add(Arrays.asList(i, j+1)); if (j - 1 >= 0) ret.add(Arrays.asList(i, j-1)); return ret; } } class Triplet { public int[] arr; public Triplet(int a, int b, int c) { arr = new int[]{a, b, c}; } } Twitter Facebook LinkedIn Previous Next Comments
Comments