package pep.Day44;
import java.util.LinkedList;
import java.util.Queue;
public class LeetCode_329_Longest_Increasing_Path_in_Matrix {
// can be done by DP, DFS - kahn's algo
public static int longestIncreasingPath(int[][] matrix) {
int n = matrix.length;
int m = matrix[0].length;
int[][] indegree = new int[n][m];
int[][] dirns = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
for (int[] dir : dirns) {
int x = dir[0] + i;
int y = dir[1] + j;
if (x >= 0 && y >= 0 && x < n && y < m)
// merakoi bhi nbr bada milta hai toh indegree +1 kr denge
if (matrix[i][j] < matrix[x][y])
indegree[x][y]++;
}
}
}
Queue<Integer> queue = new LinkedList<>();
// firse traverse krenge yeh dhundhne ke lea kiski indegree 0 hai
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (indegree[i][j] == 0)
queue.add(i * m + j);
}
}
int level = 0;
while (!queue.isEmpty()) {
int size = queue.size();
while (size-- > 0) {
int rem = queue.remove();
int i = rem / m;
int j = rem % m;
for (int[] dir : dirns) {
int x = dir[0] + i;
int y = dir[1] + j;
if (x >= 0 && y >= 0 && x < n && y < m) {
if (matrix[i][j] < matrix[x][y]) {
if (--indegree[x][y] == 0)
queue.add(x * m + y);
}
}
}
}
level++;
}
return level + 1;
}
}
Monday, March 21, 2022
Leet Code 329. Longest Increasing Path in a Matrix
Subscribe to:
Post Comments (Atom)
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:...
-
https://leetcode.com/problems/reverse-integer/description/ Integer.MAX_VALUE = 2,147,483,647 = 2 31 - 1 Integer.MIN_VALUE = -2,147,483,64...
-
package pep.Day31 ; import java.io.BufferedReader ; import java.io.InputStreamReader ; import java.util.ArrayList ; import java.util.Iterato...
-
https://leetcode.com/problems/two-sum/description/ Given the constraints: 2 <= nums.length <= 10⁴ -10⁹ <= nums[i] <= 10⁹ -10...
No comments:
Post a Comment