[leetcode] Maximal Rectangle

来源:互联网 发布:大数据 入门书籍 编辑:程序博客网 时间:2024/06/15 15:20

问题描述:

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

基本思想:

与Largest Rectangle in Histogram思想类似,只是对每行都执行了一遍。

代码:

int maximalRectangle(vector<vector<char> > &matrix) {  //C++        if(matrix.size() == 0|| matrix[0].size()==0)            return 0;                int rows = matrix.size();        int cols = matrix[0].size();                vector<int> H(cols+1);        H[cols] = 0;        int max = 0;                for(int i = 0; i < rows; i++)        {            for(int j=0; j<cols; j++)                if(matrix[i][j]=='1')                    H[j]++;                else H[j]=0;                        vector<int> stack;            for(int j = 0; j<cols+1; j++)            {                 while(stack.size() >0&&H[stack.back()]>H[j])                {                    int h = H[stack.back()];                    stack.pop_back();                                        int left = stack.size()>0?stack.back():-1;                    if(h*(j-1-left)>max)                        max = h*(j-1-left);                }                stack.push_back(j);            }        }        return max;    }


0 0