zoukankan      html  css  js  c++  java
  • leetcode Maximal Rectangle 单调栈

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4052721.html

    题目链接:leetcode Maximal Rectangle 单调栈

    该题目是  leetcode Largest Rectangle in Histogram 的二维版本,首先进行预处理,把一个n×m的矩阵化为n个直方图,然后在每个直方图中计算使用单调栈的方法计算面积最大的矩形,然后求得最大的矩形面积即可。

    Ps:这题直接在网页里面敲完居然1A,不错。

    代码如下:

     1 class Solution {
     2 public:
     3 int mr(vector<int> arr)
     4 {
     5     arr.push_back(0);
     6     stack<pair<int, int> > st;//height index
     7     int res = 0;
     8     for( int i = 0 ; i < arr.size() ; i++ )
     9     {
    10         pair<int, int> tmp;
    11         if( st.size() == 0 || st.top().first <= arr[i] )
    12         {
    13             st.push(make_pair(arr[i], i));
    14         }
    15         else
    16         {
    17             while( st.size() > 0 && st.top().first > arr[i] )
    18             {
    19                 tmp = st.top();
    20                 st.pop();
    21                 res = max(res, tmp.first*(i-tmp.second));
    22             }
    23             st.push(make_pair(arr[i], tmp.second));
    24         }
    25     }
    26     return res;
    27 }
    28 int maximalRectangle(vector<vector<char> > &matrix) 
    29 {
    30     int res = 0;
    31     if( matrix.size() == 0 ) return 0;
    32     vector<vector<int> > ma(matrix.size(), vector<int>(matrix[0].size(), 0));
    33     for( int i = 0 ; i < matrix[0].size(); i++ )
    34     {
    35         if( matrix[0][i] == '1' ) ma[0][i] = 1;
    36     }
    37     for( int i = 1 ; i < matrix.size() ; i++ )
    38     {
    39         for( int j = 0 ; j < matrix[0].size() ; j++ )
    40         {
    41             if( matrix[i][j] == '1'  )
    42             {
    43                 ma[i][j] = ma[i-1][j] + 1;
    44             }
    45         }
    46     }
    47     for( int i = 0 ; i < ma.size() ; i++ )
    48     {
    49         res = max(res, mr(ma[i]));
    50     }
    51     return res;
    52 }
    53 };
    View Code
  • 相关阅读:
    Maximal Square
    Largest Rectangle in Histogram
    Number of Islands
    Ajax工作原理及C/S与B/S的区别
    Spring的AOP和IoC及隔离级别
    final,finally,finalize的区别
    Servlet生命周期
    数组和链表
    Spring工作原理
    JVM加载class文件原理
  • 原文地址:https://www.cnblogs.com/jostree/p/4052721.html
Copyright © 2011-2022 走看看