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})  此处可以构造类

时间: 2024-10-06 12:19:29

542. 01 Matrix的相关文章

[leetcode] 542. 01 Matrix (Medium)

给予一个矩阵,矩阵有1有0,计算每一个1到0需要走几步,只能走上下左右. 解法一: 利用dp,从左上角遍历一遍,再从右下角遍历一遍,dp存储当前位置到0的最短距离. 十分粗心的搞错了col和row,改了半天---- Runtime: 132 ms, faster than 98.88% of C++ online submissions for 01 Matrix. class Solution { public: vector<vector<int>> updateMatrix(

LeetCode 542. 01 Matrix

输入:只包含0,1的矩阵 输出:元素1到达最近0的距离 算法思想:广度优先搜索. 元素为0为可达区域,元素为1为不可达区域,我们的目标是为了从可达区域不断地扩展至不可达区域,在扩展的过程中,也就计算出了这些不可达区域到达最近可达区域的距离. 每个可达元素都记录了到当前位置的距离,因此在后续的遍历中,如果是经由当前节点到达的下一节点,这个距离会被累加. 1 #include <iostream> 2 #include <vector> 3 #include <queue>

【LeetCode】542. 01 Matrix

Problem 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

Leetcode 542.01矩阵

01矩阵 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 0 0 0 示例 2: 输入: 0 0 0 0 1 0 1 1 1 输出: 0 0 0 0 1 0 1 2 1 注意: 给定矩阵的元素个数不超过 10000. 给定矩阵中至少有一个元素是 0. 矩阵中的元素只在四个方向上相邻: 上.下.左.右. 思路 先把所有0入队,把1置为MAX_VALUE,然

[Leetcode] 01 Matrix

问题: https://leetcode.com/problems/01-matrix/#/description 基本思路:广度优先遍历,根据所有最短距离为N的格找到所有距离为N+1的格,直到所有的格都找到了最短距离. 具体步骤: 首先初始化矩阵,值为0的格其最短距离也是0,保持不变:值为1的格是后面需要计算最短距离的格,我们需要一个整数来标识它们,这里可以选择一个负数或者整数的最大值. 然后进行若干轮计算,第N轮会根据已经计算出的最短距离为N-1的所有格,来找出所有最短距离为N的格. 例如,

HDU计算机学院大学生程序设计竞赛(2015’12)1006 01 Matrix

题意: 有一个n*n(n<=1000)的01矩阵 Q次询问(1000) 每次询问有几个大于等于k的全为一的子矩形 从右下角往右上角预处理每个点有一个r x vr代表右边有多少连续1x代表下面有多少连续1v代表以这个为左上角的矩阵最大是多少所以v[i][j]= min(r[i][j+1], x[i+1][j],v[i+1][j+1]) +1 r[i][j]=r[i][j+1]+1; x[i][j]=x[i+1][j]+1; 然后ans[v[i][j]]++ 预处理后缀和  O 1 输出 #incl

leetcode542 01 Matrix

思路: 多个起点的bfs. 实现: 1 class Solution 2 { 3 public: 4 vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) 5 { 6 int n = matrix.size(), m = matrix[0].size(); 7 vector<vector<int>> vis(n, vector<int>(m, 0

LeetCode——542. 01 矩阵

给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 0 0 0 示例 2: 输入: 0 0 0 0 1 0 1 1 1 输出: 0 0 0 0 1 0 1 2 1 注意: 给定矩阵的元素个数不超过 10000. 给定矩阵中至少有一个元素是 0. 矩阵中的元素只在四个方向上相邻: 上.下.左.右. 一 我们可以首先遍历一次矩阵,将值为0的点都存入queue,将

[LeetCode] 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