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

注意:

  1. 给定矩阵的元素个数不超过 10000。
  2. 给定矩阵中至少有一个元素是 0。
  3. 矩阵中的元素只在四个方向上相邻: 上、下、左、右。

思路

先把所有0入队,把1置为MAX_VALUE,然后把最靠近0的1的距离算出来,然后将他们入队,再算距离最靠近0的1的1的距离算出来,依次处理

 1 import java.util.LinkedList;
 2 import java.util.List;
 3 import java.util.Queue;
 4
 5 public class Solution {
 6     public int[][] updateMatrix(int[][] matrix) {
 7         int m = matrix.length;
 8         int n = matrix[0].length;
 9
10         Queue<int[]> queue = new LinkedList<>();
11         for (int i = 0; i < m; i++) {
12             for (int j = 0; j < n; j++) {
13                 if (matrix[i][j] == 0) {
14                     queue.offer(new int[] {i, j});
15                 }
16                 else {
17                     matrix[i][j]=Integer.MAX_VALUE;
18                 }
19             }
20         }
21
22         int[][] dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
23
24         while (!queue.isEmpty()) {
25             int[] cell = queue.poll();
26             for (int[] d : dirs) {
27                 int r = cell[0] + d[0];
28                 int c = cell[1] + d[1];
29                 if (r < 0 || r >= m || c < 0 || c >= n ||
30                         matrix[r][c] <= matrix[cell[0]][cell[1]] + 1) continue;
31                 queue.add(new int[] {r, c});
32                 matrix[r][c]=matrix[cell[0]][cell[1]] + 1;
33             }
34         }
35
36         return matrix;
37     }
38 }

原文地址:https://www.cnblogs.com/kexinxin/p/10373953.html

时间: 2024-10-14 16:26:53

Leetcode 542.01矩阵的相关文章

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

542. 01 矩阵

题目描述:给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离.两个相邻元素间的距离为 1 . 示例 1:输入: 0 0 00 1 00 0 0输出: 0 0 00 1 00 0 0示例 2:输入: 0 0 00 1 01 1 1输出: 0 0 00 1 01 2 1 思路: 题目给出了多个1,要找出每个1到0的最近曼哈顿距离.由于1到0的距离和0到1的距离一样的,所以其实我们可以换个思维:找出每个0到1的距离.因此,题目可以抽象成:多个起始点的BFS class Solutio

Leetcode 542:01 矩阵 01

Leetcode 542:01 矩阵 01 Matrix### 题目: 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 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. 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出

ACDream 1213 Matrix Multiplication (01矩阵处理)

Matrix Multiplication Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submit Statistic Next Problem Problem Description Let us consider undirected graph G = {V; E} which has N vertices and M edges. Incidence matrix of

HNU 10111 0-1矩阵

http://acm.hnu.cn/online/?action=problem&type=show&id=10111 题意:中文 题解:在龙哥的帮助下正了二分图匹配的三观--以前的理解繁琐,或者有点儿错吧--二分图匹配从左往右匹配,找增广路.顶点数和match()不需要那么麻烦. 1 // 2 // main.cpp 3 // POJ 3041 4 // 5 // Created by zhang on 14-4-16. 6 // Copyright (c) 2014年 apple. A

统计01矩阵中全1子矩阵的个数

统计01矩阵中全1子矩阵的个数 1.51Nod 1291 题意:600*600的01矩阵,统计宽i高j的全1矩阵的个数. 题解:枚举矩阵的下边界,对于每个下边界,统计所有宽极大的矩形的答案(高度可以用差分).\(n^2\) 统计完之后,我们已知所有高度的宽极大的答案,列一下式子发现两次前缀和就是最后答案. 代码: #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define mp

[EOJ Monthly 2018.10][C. 痛苦的 01 矩阵]

题目链接:C. 痛苦的 01 矩阵 题目大意:原题说的很清楚了,不需要简化_(:з」∠)_ 题解:设\(r_i\)为第\(i\)行中0的个数,\(c_j\)为第\(j\)列中0的个数,\(f_{i,j}\)代表对应格子是否为0,则有\(cost(i,j)=r_i+c_j-f_{i,j}\),\((cost(i,j))^2=r_i^2+c_j^2+f_{i,j}+2r_ic_j-2f_{i,j}(r_i+c_j)\) $$\sum_{i=1}^n \sum_{j=1}^n \left( cost(