Maximal Rectangle leetcode java


題目:

Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.

 

題解:

 這道題可以應用之前解過的Largetst Rectangle in Histogram一題輔助解決。解決方法是:

按照每一行計算列中有1的個數,作為高度,當遇見0時,這一列高度就為0。然后對每一行計算 Largetst Rectangle in Histogram,最后得到的就是結果。

 

代碼如下:

 1  public  int maximalRectangle( char[][] matrix) {
 2          if(matrix== null || matrix.length==0 || matrix[0].length==0)
 3              return 0;
 4          int m = matrix.length;
 5          int n = matrix[0].length;
 6          int max = 0;
 7          int[] height =  new  int[n]; // 對每一列構造數組
 8           for( int i=0;i<m;i++){
 9              for( int j=0;j<n;j++){
10                  if(matrix[i][j] == '0') // 如果遇見0,這一列的高度就為0了
11                      height[j] = 0;
12                  else
13                     height[j] += 1;
14             }
15             max = Math.max(largestRectangleArea(height),max);
16         }
17          return max;
18     }
19     
20      public  int largestRectangleArea( int[] height) {
21         Stack<Integer> stack =  new Stack<Integer>();
22          int i = 0;
23          int maxArea = 0;
24          int[] h =  new  int[height.length + 1];
25         h = Arrays.copyOf(height, height.length + 1);
26          while(i < h.length){
27              if(stack.isEmpty() || h[stack.peek()] <= h[i]){
28                 stack.push(i);
29                 i++;
30             } else {
31                  int t = stack.pop();
32                  int square = -1;
33                  if(stack.isEmpty())
34                     square = h[t]*i;
35                  else{
36                      int x = i-stack.peek()-1;
37                     square = h[t]*x;
38                 }
39                 maxArea = Math.max(maxArea, square);
40             }
41         }
42          return maxArea;
43     }

 


免責聲明!

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



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