zoukankan      html  css  js  c++  java
  • [leetcode]85. Maximal Rectangle 最大矩形

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

    Example:

    Input:
    [
      ["1","0","1","0","0"],
      ["1","0","1","1","1"],
      ["1","1","1","1","1"],
      ["1","0","0","1","0"]
    ]
    Output: 6

    题意

    给定一个01矩阵,找出其中全由1构成的最大矩形。

    思路

    将所有1连接的部分看成一个bar height,这个题就可以看成是[leetcode]84. Largest Rectangle in Histogram直方图中的最大矩形

    的followup,进行代码复用

    代码

     1 class Solution {
     2     public int maximalRectangle(char[][] matrix) {
     3        if(matrix.length==0 || matrix[0].length==0) return 0;
     4        int row = matrix.length;
     5         int col = matrix[0].length;
     6         int [] heights = new int[col];
     7         int area = 0;
     8         for(int i = 0; i< row; i++){
     9             for(int j = 0; j< col; j++){
    10                 if(matrix[i][j]=='1'){
    11                     heights[j]++;
    12                 }else{
    13                     heights[j]=0;
    14                 }
    15                 
    16             }     
    17            area = Math.max(area,  largestRectangle(heights));
    18         }
    19          return area;     
    20     }
    21     
    22     public int largestRectangle(int[] heights ){
    23         int area = 0;
    24         Stack<Integer> s = new Stack<>();
    25         for(int i = 0; i<=heights.length;){
    26             int value = i<heights.length ? heights[i] : 0;
    27             if(s.isEmpty() || value > heights[s.peek()]){
    28                 s.push(i);
    29                 i++;
    30             }else{
    31                 int temp = s.pop();
    32                 area = Math.max(area, heights[temp]*(s.isEmpty()? i: i-s.peek()-1));
    33             }// end else 
    34         }// end for 
    35         return area; 
    36     }
    37 }
  • 相关阅读:
    H面试程序(0):字符串一些常用函数的实现
    ctype.h头文件
    poj 3657
    UVA10294项链和手镯(等价类计数问题)
    UVA11375火柴(递推+大数)
    UVA11375火柴(递推+大数)
    UVA11388GCD LCM
    UVA11388GCD LCM
    UVA10943简单递推
    UVA10943简单递推
  • 原文地址:https://www.cnblogs.com/liuliu5151/p/10955734.html
Copyright © 2011-2022 走看看