Tuesday, March 15, 2022

Leet Code 542. 01 Matrix

Example 1:

Input: mat = [[0,0,0],[0,1,0],[0,0,0]]
Output: [[0,0,0],[0,1,0],[0,0,0]]


Find: Har element ka uske nearest 0 se distance kitna hai

BFS lagaenge


add -> mark -> remove -> add nbr

    --> isme hum push hone se pehle hi visited me mark kr dete hain. Hence, cycle detect nhi ho paege

PREVIOS: add -> remove -> mark -> add nbr    

    --> we detected cycle, jo humne pop kiya hai kya woh pehle se visited hai


ADJACENT -> jo edge share krte hain








package pep.Day42;

import java.util.ArrayDeque;
import java.util.Queue;

public class LeetCode_01_Matrix {
public static void main(String[] args) {
int[][] matrix = {{0, 0, 0}, {0, 1, 0}, {1, 1, 1}};
System.out.println(updateMatrix(matrix));

}

public static int[][] updateMatrix(int[][] matrix) {
int n = matrix.length;
int m = matrix[0].length;
boolean[][] visited = new boolean[n][m];

Queue<Integer> que = new ArrayDeque<>();

for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (matrix[i][j] == 0) {
visited[i][j] = true;
que.add(i * m + j);
}
}
}

while (!que.isEmpty()) {
int out = que.remove();
int i = out / m;
int j = out % m;

int[][] dirns = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};

for (int[] dir : dirns) {
int x = dir[0] + i;
int y = dir[1] + j;
// 1. ans figureout krna hai
// 2. jinko add krenge unko visited mark krna hai, i.e
//ans[new] = ans[prev] +1
if (x < 0 || y < 0 || x >= n || y >= m || visited[x][y])
continue;

visited[x][y] = true;
matrix[x][y] = matrix[i][j] + 1;
// also, jiska nearest nikaal chuke hain, usko add kr denge
// queue me, take auron ke lea answer dega woh
que.add(x * m + y);
}
}
return matrix;
}
}

No comments:

Post a Comment

Diagonal Traversal

 eg.  1       2       3       4 5      6       7       8 9    10    11     12 13  14   15    16 Output: 1 6 11 16 2 7 12 3 8 4  Approach:...