Advertisement
1988coder

764. Largest Plus Sign

Nov 23rd, 2018
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.75 KB | None | 0 0
  1. /*
  2. Dynamic Programming
  3.  
  4. Time Complexity: O(N^2)
  5. Space Complexity: O(N^2)
  6. */
  7. class Solution {
  8.     public int orderOfLargestPlusSign(int N, int[][] mines) {
  9.         if (N < 1) {
  10.             return 0;
  11.         }
  12.         if (mines == null || mines.length == 0) {
  13.             return N % 2 == 0 ? N/2 : N/2 + 1;
  14.         }
  15.        
  16.         int[][] grid = new int[N][N];
  17.        
  18.         for (int[] row : grid) {
  19.             Arrays.fill(row, N);
  20.         }
  21.         for (int[] mine : mines) {
  22.             grid[mine[0]][mine[1]] = 0;
  23.         }
  24.        
  25.         for (int i = 0; i < N; i++) {
  26.             int l = 0;
  27.             int r = 0;
  28.             int u = 0;
  29.             int d = 0;
  30.             for (int j = 0, k = N-1; j < N; j++, k--) {
  31.                 // Left to Right
  32.                 // How far left it can reach
  33.                 l = grid[i][j] == 0 ? 0 : l+1;
  34.                 grid[i][j] = Math.min(grid[i][j], l);
  35.                
  36.                 // Right to Left
  37.                 // How far right it can reach
  38.                 r = grid[i][k] == 0 ? 0 : r+1;
  39.                 grid[i][k] = Math.min(grid[i][k], r);
  40.                
  41.                 // Top to Bottom
  42.                 // How far up it can reach
  43.                 u = grid[j][i] == 0 ? 0 : u+1;
  44.                 grid[j][i] = Math.min(grid[j][i], u);
  45.                
  46.                 // Bottom to Top
  47.                 // How far down it can reach
  48.                 d = grid[k][i] == 0 ? 0 : d+1;
  49.                 grid[k][i] = Math.min(grid[k][i], d);
  50.             }
  51.         }
  52.        
  53.         int result = 0;
  54.         for (int[] row : grid) {
  55.             for (int cell : row) {
  56.                 result = Math.max(result, cell);
  57.             }
  58.         }
  59.        
  60.         return result;
  61.     }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement