[C++] LeetCode 85. 最大矩形

题目

给定一个填充了 0 和 1 的二进制矩阵,找到最大的只包含 1 的矩形并返回其面积。
例如,给出以下矩阵:
这里写图片描述
返回6

题解

这道题可以参考LeetCode 84. 柱状图中最大的矩形,这道题,那么这里每一行维持一个数组,记录当前矩阵的高度,然后就可以采用84. 柱状图中最大的矩形的方法计算出当前层最大面积,逐层下去,就可以得出最大值
84. 柱状图中最大的矩形求解过程可以参考84. 柱状图中最大的矩形

代码

class Solution {
public:
    int maximalRectangle(vector<vector<char>>& matrix) {
        if(matrix.size()==0||matrix[0].size()==0) return 0;
        int n=matrix.size(),m=matrix[0].size();
        vector<int> height(m,0);
        int res=0;
        for(int i=0;i<n;i++){
            stack<int> area;
            for(int j=0;j<m;j++){
                if(matrix[i][j]=='0') height[j]=0;
                else height[j]+=1;
                if(area.empty()||height[j]>height[area.top()]) area.push(j);
                else{
                    while(!area.empty()&&height[area.top()]>=height[j]){
                        int tmp=area.top();
                        area.pop();
                        int length=0;
                        if(area.empty()) length=j;
                        else length=j-area.top()-1;
                        res=max(res,height[tmp]*length);
                    }
                    area.push(j);
                }
            }
            while(!area.empty()){
                int tmp=area.top();
                area.pop();
                int length=0;
                if(area.empty()) length=m;
                else length=m-area.top()-1;
                res=max(res,height[tmp]*length);
            }
        }
        return res;
    }
};
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lv1224/article/details/79974270
个人分类: Leetdode
所属专栏: LeetCode解析
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭