Skip to content

Commit 25f5cba

Browse files
committed
Runtime: 150 ms (Top 49.61%) | Memory: 121.4 MB (Top 10.85%)
1 parent 792cb10 commit 25f5cba

File tree

1 file changed

+43
-42
lines changed

1 file changed

+43
-42
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,45 @@
1+
// Runtime: 150 ms (Top 49.61%) | Memory: 121.4 MB (Top 10.85%)
12
class Solution {
2-
int[][] dir = new int[][]{{0, -1}, {-1, 0}, {1, 0}, {0, 1}};
3-
public int latestDayToCross(int row, int col, int[][] cells) {
4-
int grid[][] = new int[row][col];
5-
int low = 0, high = cells.length - 1;
6-
int ans = 0;
7-
8-
while(low <= high){
9-
int mid = low + (high - low) / 2;
10-
11-
for(int i = 0; i <= mid; i++)
12-
grid[cells[i][0] -1][cells[i][1] - 1] = 1;
13-
14-
if(helper(grid, new boolean[row][col])){
15-
ans = mid;
16-
low = mid + 1;
17-
}
18-
19-
else high = mid - 1;
20-
21-
for(int i = 0; i < grid.length; i++)
22-
for(int j = 0; j < grid[i].length; j++)
23-
grid[i][j] = 0;
24-
}
25-
26-
return ans + 1;
27-
}
28-
29-
public boolean helper(int[][] grid, boolean[][] visited){
30-
for(int i = 0; i < grid[0].length; i++)
31-
if(grid[0][i] == 0 && !visited[0][i] &&safe(0, i, grid, visited)) return true;
32-
return false;
33-
}
34-
35-
public boolean safe(int i, int j, int[][] cells, boolean[][] visited){
36-
if(i < 0 || j < 0 || i >= visited.length || j >= visited[i].length || visited[i][j] || cells[i][j] == 1) return false;
37-
if(i == cells.length - 1 && j < cells[i].length && cells[i][j] == 0) return true;
38-
39-
visited[i][j] = true;
40-
for(int k = 0; k < dir.length; k++)
41-
if(safe(i + dir[k][0], j + dir[k][1], cells, visited)) return true;
42-
return false;
43-
}
3+
int[][] dir = new int[][]{{0, -1}, {-1, 0}, {1, 0}, {0, 1}};
4+
public int latestDayToCross(int row, int col, int[][] cells) {
5+
int grid[][] = new int[row][col];
6+
int low = 0, high = cells.length - 1;
7+
int ans = 0;
8+
9+
while(low <= high){
10+
int mid = low + (high - low) / 2;
11+
12+
for(int i = 0; i <= mid; i++)
13+
grid[cells[i][0] -1][cells[i][1] - 1] = 1;
14+
15+
if(helper(grid, new boolean[row][col])){
16+
ans = mid;
17+
low = mid + 1;
18+
}
19+
20+
else high = mid - 1;
21+
22+
for(int i = 0; i < grid.length; i++)
23+
for(int j = 0; j < grid[i].length; j++)
24+
grid[i][j] = 0;
25+
}
26+
27+
return ans + 1;
28+
}
29+
30+
public boolean helper(int[][] grid, boolean[][] visited){
31+
for(int i = 0; i < grid[0].length; i++)
32+
if(grid[0][i] == 0 && !visited[0][i] &&safe(0, i, grid, visited)) return true;
33+
return false;
34+
}
35+
36+
public boolean safe(int i, int j, int[][] cells, boolean[][] visited){
37+
if(i < 0 || j < 0 || i >= visited.length || j >= visited[i].length || visited[i][j] || cells[i][j] == 1) return false;
38+
if(i == cells.length - 1 && j < cells[i].length && cells[i][j] == 0) return true;
39+
40+
visited[i][j] = true;
41+
for(int k = 0; k < dir.length; k++)
42+
if(safe(i + dir[k][0], j + dir[k][1], cells, visited)) return true;
43+
return false;
44+
}
4445
}

0 commit comments

Comments
 (0)