zoukankan      html  css  js  c++  java
  • 542. 01 Matrix

    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.

    矩阵的bfs, 考察:

    1.哪些是先入队的? 外围? 还是遍历所有符合条件的? 此处改成Integer.Max_Value, 

    2.入队之后, 邻居元素怎么改让其入队. 怎么跳过不符合题意的元素, visited[] 是否使用

    3一般用在改矩阵的题中 tips, 可以该元素e.g. 将'o' 改成'$'(见130. Surrounded Regions)

    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 = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};
            while (!queue.isEmpty()) {
                int[] cur = queue.poll();
                for (int[] cell : dirs) {
                    int r = cur[0] + cell[0];
                    int c = cur[1] + cell[1];
                
                    if (r < 0 || r >= m || c < 0 || c >= n || matrix[r][c] <= matrix[cur[0]][cur[1]] + 1) {
                        continue;
                    }
                    matrix[r][c] = matrix[cur[0]][cur[1]] + 1;
                    queue.offer(new int[]{r,c});
                }
            }
            return matrix;
        }
    

    矩阵, 常将元素构造类使用: queue.offer(new int[]{r,c})  此处可以构造类

  • 相关阅读:
    MatrixTraceTransform主要逻辑在transform方法中
    重写LayoutParams,读取子View自定义属性
    onLayout初始化裁剪信息
    drawChild中画阴影,裁剪出圆角
    继承ConstraintLayout
    如何创建自定义的Resource实例
    mysql优化整理(索引)
    java设计模式
    Oracle中MERGE语句的使用
    BigDecimal 转成 double
  • 原文地址:https://www.cnblogs.com/apanda009/p/7273113.html
Copyright © 2011-2022 走看看