当前位置:网站首页>Sword finger offer II 107 Distance in matrix
Sword finger offer II 107 Distance in matrix
2022-07-07 09:48:00 【PI Qiliang】
The finger of the sword Offer II 107. The distance in the matrix 【 Medium question 】
Ideas :
use BFS Sequence traversal , Find all the elements 0, From element 0 Start sequence traversal in four directions , set up ans The array stores the latest 0 distance , be ans in ,mat Matrix elements 0 The position value is 0, Encountered during traversal of each layer 1 Will ans Value is updated to element 0 Of ans value +1
Code :
class Solution {
static int[][] ans;
static int[][] dir = {
{
0,-1},{
0,1},{
-1,0},{
1,0}};
static int m,n;
public static int[][] updateMatrix(int[][] mat) {
m = mat.length;
n = mat[0].length;
// Mark mat matrix (i,j) Whether the location element has been searched
boolean[][] seen = new boolean[m][n];
// Storage mat In the matrix 0 The position coordinates of
Queue<int[]> queue = new LinkedList<>();
// Storage mat matrix (i,j) The nearest location element 0 Distance of
ans = new int[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (mat[i][j] == 0){
// take mat The elements in the matrix 0 The position coordinates of are pressed into the queue
queue.offer(new int[]{
i,j});
// The current location of the tag has been searched
seen[i][j] = true;
}
}
}
//BFS Traverse , When the element in the stack is empty , The loop ends
while(!queue.isEmpty()){
// Take out the top element of the queue 0 The location of
int[] cell = queue.poll();
// Take out the elements 0 Coordinates of
int i = cell[0],j = cell[1];
for (int k = 0; k < 4; k++) {
// The element 0 Search up, down, left and right , The location coordinates searched are (x,y)
int x = i + dir[k][0],y = j + dir[k][1];
// If (x,y) Does not exceed the matrix boundary and (x,y) The location has not been searched
if (x >= 0 && x < m && y >= 0 && y < n && !seen[x][y]){
//ans Of (x,y) Position value be equal to ans Of (i,j) Position value + 1
ans[x][y] = ans[i][j] + 1;
// take (x,y) Position push into queue
queue.offer(new int[]{
x,y});
// take (x,y) The location is marked as searched
seen[x][y] = true;
}
}
}
return ans;
}
}
边栏推荐
- Dynamics 365Online ApplicationUser创建方式变更
- 章鱼未来之星获得25万美金奖励|章鱼加速器2022夏季创业营圆满落幕
- Upload taro pictures to Base64
- Dynamics 365online applicationuser creation method change
- How to use Mongo shake to realize bidirectional synchronization of mongodb in shake database?
- 2020CCPC威海 J - Steins;Game (sg函数、线性基)
- Pit using BigDecimal
- 牛客网——华为题库(61~70)
- Strategic cooperation subquery becomes the secret weapon of Octopus web browser
- Can't connect to MySQL server on '(10060) solution summary
猜你喜欢

VSCode+mingw64

How to use clipboard JS library implements copy and cut function

小程序弹出半角遮罩层

Nested (multi-level) childrn routes, query parameters, named routes, replace attribute, props configuration of routes, params parameters of routes

Unity uses mesh to realize real-time point cloud (I)

Pit using BigDecimal

esp8266使用TF卡并读写数据(基于arduino)

战略合作|SubQuery 成为章鱼网络浏览器的秘密武器

How to speed up video playback in browser

【原创】程序员团队管理的核心是什么?
随机推荐
The difference between viewpager2 and viewpager and the implementation of viewpager2 in the rotation chart
[4G/5G/6G专题基础-147]: 6G总体愿景与潜在关键技术白皮书解读-2-6G发展的宏观驱动力
Unity shader (data type in cghlsl)
小程序弹出半角遮罩层
Niuke - Huawei question bank (61~70)
【原创】程序员团队管理的核心是什么?
[Frida practice] "one line" code teaches you to obtain all Lua scripts in wegame platform
asp. How to call vb DLL function in net project
esp8266使用TF卡并读写数据(基于arduino)
Natapp intranet penetration
战略合作|SubQuery 成为章鱼网络浏览器的秘密武器
Communication mode between processes
Octopus future star won a reward of 250000 US dollars | Octopus accelerator 2022 summer entrepreneurship camp came to a successful conclusion
用flinksql的方式 写进 sr的表,发现需要删除的数据没有删除,参照文档https://do
高斯消元
scrapy爬虫mysql,Django等
哈夫曼编码压缩文件
JS inheritance prototype
洛谷P2482 [SDOI2010]猪国杀
Use 3 in data modeling σ Eliminate outliers for data cleaning