2375. Minimum Obstacle Removal To Reach Corner¶
Difficulty: Hard
LeetCode Problem View on GitHub
2375. Minimum Obstacle Removal to Reach Corner
Hard
You are given a 0-indexed 2D integer array grid of size m x n. Each cell has one of two values:
0represents an empty cell,1represents an obstacle that may be removed.
You can move up, down, left, or right from and to an empty cell.
Return the minimum number of obstacles to remove so you can move from the upper left corner (0, 0) to the lower right corner (m - 1, n - 1).
Example 1:

Input: grid = [[0,1,1],[1,1,0],[1,1,0]] Output: 2 Explanation: We can remove the obstacles at (0, 1) and (0, 2) to create a path from (0, 0) to (2, 2). It can be shown that we need to remove at least 2 obstacles, so we return 2. Note that there may be other ways to remove 2 obstacles to create a path.
Example 2:

Input: grid = [[0,1,0,0,0],[0,1,0,1,0],[0,0,0,1,0]] Output: 0 Explanation: We can move from (0, 0) to (2, 4) without removing any obstacles, so we return 0.
Constraints:
m == grid.lengthn == grid[i].length1 <= m, n <= 1052 <= m * n <= 105grid[i][j]is either0or1.grid[0][0] == grid[m - 1][n - 1] == 0
Solution¶
class Solution {
static class Pair {
int row, col, distance;
public Pair(int row, int col,int distance) {
this.row = row;
this.col = col;
this.distance = distance;
}
}
public int minimumObstacles(int[][] grid) {
int dir[][] = {{-1, 0} , {1, 0} , {0 , -1} , {0 , 1}};
int n = grid.length;
int m = grid[0].length;
PriorityQueue<Pair> pq = new PriorityQueue<Pair>((x,y) -> x.distance - y.distance);
int dist[][] = new int[n + 1][m + 1];
for(int current[] : dist) Arrays.fill(current , (int)(1e9));
dist[0][0] = grid[0][0];
pq.offer(new Pair(0 , 0 ,dist[0][0]));
while(!pq.isEmpty()) {
int cr = pq.peek().row;
int cc = pq.peek().col;
int cd = pq.peek().distance;
pq.poll();
for(int dire[] : dir) {
int nr = cr + dire[0];
int nc = cc + dire[1];
if(nr < n && nc < m && nr >= 0 && nc >= 0) {
if(dist[nr][nc] > cd + grid[nr][nc]) {
dist[nr][nc] = cd + grid[nr][nc];
pq.offer(new Pair(nr, nc, dist[nr][nc]));
}
}
}
}
if(dist[n - 1][m - 1] == (int)(1e9)) return -1;
return dist[n - 1][m - 1];
}
}
Complexity Analysis¶
- Time Complexity:
O(?) - Space Complexity:
O(?)
Approach¶
Detailed explanation of the approach will be added here