Advertisement
Guest User

Untitled

a guest
Apr 9th, 2020
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.12 KB | None | 0 0
  1. class Solution {
  2.       static int[][] MOVES = new int[][]{
  3.             {0, -1},
  4.             {0, 1},
  5.             {-1, 0},
  6.             {1, 0},
  7.     };
  8.    
  9.     public int maximumMinimumPath(int[][] A) {
  10.         return solve(0, 0, A, new boolean[A.length][A[0].length], A[0][0], new HashMap<>());
  11.     }
  12.    
  13.     int solve(int i, int j, int[][] A, boolean[][] visited, int minSofar, Map<String, Integer> memo) {
  14.      
  15.         if(i == A.length - 1 && j == A[0].length - 1) {
  16.             return minSofar;
  17.         }
  18.  
  19.         String key = i + "," + j;
  20.         if(memo.containsKey(key))  {
  21.             return Math.min(minSofar, memo.get(key));
  22.         }
  23.  
  24.         int max = 0;
  25.         for (int[] move : MOVES) {
  26.             int x = i + move[0];
  27.             int y = j + move[1];
  28.             if (x >= 0 && x < A.length && y >= 0 && y < A[0].length && !visited[x][y]) {
  29.                 visited[x][y] = true;
  30.                 max =  Math.max(max, solve(x,y, A, visited, Math.min(minSofar, A[x][y]), memo));
  31.                 visited[x][y] = false;
  32.             }
  33.         }
  34.         memo.put(key, max);
  35.         return max;
  36.     }
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement