Leetcode 764. Largest Plus Sign


 

思路:動態規划。對於第i行第j列的元素grid[i][j]表示的是這個元素的plus sign的等級,初始化不在mines中的元素對應的grid值為較大值(只要大於N/2即可),在mines中的元素對應的grid值為0。不在mines中的元素,其grid[i][j]=左右上下四個方向最少的連續1的個數(不包括自己)+1。以由左至右為例,假設當前的grid[i][j]已經最優,那么如果(i,j)左側沒有grid[i][j]=0的元素的話,grid[i][j]就要和l取較小值表示當前的最優;如果左側有grid[i][j]=0的元素,假設是grid[i][k]=0,那么就是取grid[i][j]和j-k的較小值表示當前的最優。最后的最后,取grid[i][j]最大的值作為返回值。

 1 class Solution {
 2     public int orderOfLargestPlusSign(int N, int[][] mines) {
 3         int[][] grid = new int[N][N];
 4         for(int[] m:grid) {
 5             Arrays.fill(m, N);//初始化為較大值
 6         }
 7         for(int[] m:mines) {
 8             grid[m[0]][m[1]] = 0;
 9         }
10         for(int i = 0; i < N; i++) {
11             for(int j = 0, k = N - 1, l = 0, r = 0, u = 0, d = 0; j < N; j++, k--) {
12                 grid[i][j] = Math.min(grid[i][j], l = (grid[i][j] == 0 ? 0 : l + 1));//由左至右
13                 grid[i][k] = Math.min(grid[i][k], r = (grid[i][k] == 0 ? 0 : r + 1));//由右至左
14                 grid[j][i] = Math.min(grid[j][i], u = (grid[j][i] == 0 ? 0 : u + 1));//由上至下
15                 grid[k][i] = Math.min(grid[k][i], d = (grid[k][i] == 0 ? 0 : d + 1));//由下至上
16             }
17         }
18         int res = 0;
19         for(int i = 0; i < N; i++) {
20             for(int j = 0; j < N; j++) {
21                 res = Math.max(res, grid[i][j]);
22             }
23         }
24         return res;
25     }
26 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM