leetcode 85 最大矩形

Posted qingfengdahui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 85 最大矩形相关的知识,希望对你有一定的参考价值。

题意:

技术图片

 

 题解:

我们知道最大矩形一定是由矩形中某个点向上延伸直到为‘0’,然后往左右延伸(在高度得到保证的情况下左右伸展)的矩形

因此我们通过遍历每一行来求取对于以每个点来说的最大矩形并获得最大值

这里最关键的一点就是当遍历到某一个点的上面的那个点为‘0’,此时该点的左右延伸长度不在与上一行进行比较,而实从本行重新开始,

这里十分精妙,具体体现在程序中的当该点为‘0’时 l[j]=0和 r[j]=n,通过这一赋值可以避免下一行的左右延伸长度与上一行进行比较。

class Solution {
public:
    int maximalRectangle(vector<vector<char>>& matrix) {
        int m=matrix.size();
        if(m==0)
            return 0;
        int n=matrix[0].size();
        int area=0;
        vector<int> l(n,0);
        vector<int> r(n,n);
        vector<int> h(n,0);
        for(int i=0;i<m;i++)
        {
            int curl=0,curr=n;
            for(int j=0;j<n;j++)
            {
                if(matrix[i][j]==0)
                {
                    curl=j+1;
                    l[j]=0;
                }
                else
                {
                    l[j]=max(l[j],curl);
                }
            }
            for(int j=n-1;j>=0;j--)
            {
                if(matrix[i][j]==0)
                {
                    curr=j;
                    r[j]=n;
                }
                else
                {
                    r[j]=min(r[j],curr);
                }
            }
            for(int j=0;j<n;j++)
            {
                if(matrix[i][j]==1)
                {
                    h[j]=h[j]+1;
                    area=max(area,h[j]*(r[j]-l[j]));
                }
                else
                {
                    h[j]=0;
                }
            }
        }
        return area;
    }
};

 

以上是关于leetcode 85 最大矩形的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 85 最大矩形

LeetCode(85):最大矩形

LeetCode85. 最大矩形

LeetCode 85 | 如何从矩阵当中找到数字围成的最大矩形的面积?

LeetCode 85最大矩形

Leetcode No.85 最大矩形(单调栈)