1
+ // Runtime: 150 ms (Top 49.61%) | Memory: 121.4 MB (Top 10.85%)
1
2
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
+ }
44
45
}
0 commit comments