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

    原题链接在这里:https://leetcode.com/problems/01-matrix/description/

    题目:

    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:

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

    题解:

    先把非0点标记成Integer.MAX_VALUE. 然后从每个0点开始做BFS. 若是对周围的点更新出更小的值就把更小值放入queue中用作将来的BFS.

    Time Complexity: O(m*n). m = matrix.length, n = matrix[0].length. 每个点最多进入queue 4 次.

    Space: O(m*n). queue size.

    AC Java:

     1 class Solution {
     2     public int[][] updateMatrix(int[][] matrix) {
     3         if(matrix == null || matrix.length == 0 || matrix[0].length == 0){
     4             return matrix;
     5         }
     6         
     7         int m = matrix.length;
     8         int n = matrix[0].length;
     9         
    10         LinkedList<int []> que = new LinkedList<int []>();
    11         for(int i = 0; i<m; i++){
    12             for(int j = 0; j<n; j++){
    13                 if(matrix[i][j] == 0){
    14                     que.add(new int[]{i, j});
    15                 }else{
    16                     matrix[i][j] = Integer.MAX_VALUE;
    17                 }
    18             }
    19         }
    20         
    21         int [][] dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
    22         
    23         while(!que.isEmpty()){
    24             int [] cur = que.poll();
    25             for(int [] dir : dirs){
    26                 int dx = cur[0] + dir[0];
    27                 int dy = cur[1] + dir[1];
    28                 if(dx<0 || dx>=m || dy<0 || dy>=n || matrix[cur[0]][cur[1]]+1>=matrix[dx][dy]){
    29                     continue;
    30                 }
    31                 
    32                 matrix[dx][dy] = matrix[cur[0]][cur[1]]+1;
    33                 que.add(new int[]{dx, dy});
    34             }
    35         }
    36         
    37         return matrix;
    38     }
    39 }
  • 相关阅读:
    使用 Spring data redis 结合 Spring cache 缓存数据配置
    Spring Web Flow 笔记
    Linux 定时实行一次任务命令
    css js 优化工具
    arch Failed to load module "intel"
    go 冒泡排序
    go (break goto continue)
    VirtualBox,Kernel driver not installed (rc=-1908)
    go运算符
    go iota
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/9602413.html
Copyright © 2011-2022 走看看