算法第10周01 Matrix[medium]
来源:互联网 发布:上海闵行奥特莱斯淘宝 编辑:程序博客网 时间:2024/06/14 00:35
算法第10周01 Matrix[medium]
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 00 1 00 0 0
Output:
0 0 00 1 00 0 0
Example 2:
Input:
0 0 00 1 01 1 1
Output:
0 0 00 1 01 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
这道题的意思是找到离矩阵中1距离最近的0与1之间的距离。
我们可以采用BFS的方法,从所有的0出发,依次找到与之相距为1,2,3…的位置,如果这个距离小于本来的距离,那么就更新矩阵。
算法复杂度O(n*m)
class Solution {public: vector<vector<int> > updateMatrix(vector<vector<int> >& A) { int n = A.size(); int m = A[0].size(); vector<vector<int> > dis(n, vector<int>(m)); queue<pair<int, int> > que; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (A[i][j] == 1) { dis[i][j] = INT_MAX; } else { dis[i][j] = 0; que.push(make_pair(i, j)); } } } int dir[4][2] = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } }; // 四个方向 while (!que.empty()) { pair<int, int> curr = que.front(); que.pop(); for (int i = 0; i < 4; i++) { int nr = curr.first+dir[i][0]; int nc = curr.second+dir[i][1]; if (nr >= 0&&nc >= 0&& nr < n&&nc < m) { if (dis[nr][nc] > dis[curr.first][curr.second]+1) { dis[nr][nc] = dis[curr.first][curr.second]+1; que.push(make_pair(nr, nc)); } } } } return dis; }};
阅读全文
0 0
- 算法第10周01 Matrix[medium]
- (算法分析Week15)01Matrix[Medium]
- 542. 01 Matrix -- Medium
- 算法第11周Palindromic Substrings[medium]
- 算法第14周Unique Paths[medium]
- 算法第16周Jump Game[medium]
- 542. 01 Matrix(Medium)
- 算法第12周Delete Operation for Two Strings[Medium]
- 算法第14周Unique Paths II[medium]
- 算法分析与设计课程06——542. 01 Matrix(Medium)
- Spiral Matrix(medium)
- [Leetcode 54, Medium] Spiral Matrix
- 【LeetCode】(54)Spiral Matrix(Medium)
- Medium 54题 Spiral Matrix
- LeetCode 54.Spiral Matrix (Medium)
- LeetCode 59.Spiral Matrix || (Medium)
- 算法第二周Add Two Numbers[medium]
- 算法第三周 3Sum[medium]
- 进行一次性校验码的校验(session、时间戳、随机数、字符缓存、绘画)
- POJ-1836 Alignment (Romania OI 2002 线性dp 最长上升子序列)
- c:统计单词数量2
- Java面向对象四大特性之多态
- python获得微信好友头像
- 算法第10周01 Matrix[medium]
- Rotation equivariant vector field networks 浏览记录
- 6.5
- php目录文件
- static修饰局部变量
- 分别使用Frame和JFrame新建可关闭窗体及二者异同
- 凸优化知识点总结
- Java多线程2:线程池的使用
- nodeJS---两种渲染模式