zoukankan      html  css  js  c++  java
  • 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     }
  • 相关阅读:
    phpcms——列出父目录下的所有子目录问题
    chm格式文档不能阅读问题
    php学习 5 无限级分类
    phpcms——rss问题
    phpcms——评论页面修改
    phpcm后台评论管理修改评论列出条数
    php学习4 函数定义
    网站测试工具
    ASP.NET前台代码绑定后台变量方法总结收藏帖
    在asp.net网站下使用fckeditor 和fcfinder (包括修改fcfinder 来使上传文件按时间来命名和按用户分割文件)
  • 原文地址:https://www.cnblogs.com/springfor/p/3869492.html
Copyright © 2011-2022 走看看