美文网首页机试
542. 01 Matrix

542. 01 Matrix

作者: matrxyz | 来源:发表于2018-01-13 15:45 被阅读0次

    Given a matrix consists of 0 and 1, find the distance of the nearest 0 for each cell.
    The distance between two adjacent cells is 1.

    Example 1: 
    Input:
    
    0 0 0
    0 1 0
    0 0 0
    Output:
    0 0 0
    0 1 0
    0 0 0
    
    Example 2: 
    Input:
    
    0 0 0
    0 1 0
    1 1 1
    Output:
    0 0 0
    0 1 0
    1 2 1
    

    Note:
    The number of elements of the given matrix will not exceed 10,000.
    There are at least one 0 in the given matrix.
    The cells are adjacent in only four directions: up, down, left and right.

    Solution:BFS 染色

    思路:
    我们可以首先遍历一次矩阵,将值为0的点都存入queue,将值为1的点改为INT_MAX。
    然后开始BFS遍历,从queue中取出一个数字,遍历其周围四个点,如果越界或者周围点的值小于等于当前值,则直接跳过。因为周围点的距离更小的话(已被更好的染过),就没有更新的必要,否则将周围点的值更新为当前值加1,然后把周围点的坐标加入queue。
    Time Complexity: O(N) Space Complexity: O(N)

    Solution Code:

    public class Solution {
        public int[][] updateMatrix(int[][] matrix) {
            int m = matrix.length;
            int n = matrix[0].length;
            
            Queue<int[]> queue = new LinkedList<>();
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    if (matrix[i][j] == 0) {
                        queue.offer(new int[] {i, j});
                    }
                    else {
                        matrix[i][j] = Integer.MAX_VALUE;
                    }
                }
            }
            
            int[][] dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
            
            while (!queue.isEmpty()) {
                int[] cell = queue.poll();
                for (int[] d : dirs) {
                    int r = cell[0] + d[0];
                    int c = cell[1] + d[1];
                    if (r < 0 || r >= m || c < 0 || c >= n || 
                        matrix[r][c] <= matrix[cell[0]][cell[1]] + 1) continue;
                    queue.add(new int[] {r, c});
                    matrix[r][c] = matrix[cell[0]][cell[1]] + 1;
                }
            }
            
            return matrix;
        }
    }
    

    相关文章

      网友评论

        本文标题:542. 01 Matrix

        本文链接:https://www.haomeiwen.com/subject/twvcoxtx.html