Leetcode No.85 *

给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

示例:

输入:
[
  ["1","0","1","0","0"],
  ["1","0","1","1","1"],
  ["1","1","1","1","1"],
  ["1","0","0","1","0"]
]
输出: 6

解答:对于此类问题,可以用递归来处理。这个问题可以转化成求柱状图的最大面积,具体转化方式如下:
以列为单位构建柱状图高度,若 v[m][n] 对应点的值为0,那么 v[m+1][n]的高度值需要重新统计;否则高度值进行累加。

然后通过对构建的每一行柱状图采用求最大面积的求法得出结果。

int maximalRectangleHelper(vector<int> height)
{
    int res = 0;
    height.push_back(0);
    stack<int> s;
    for(int i=0;i<(signed)height.size();i++)
    {
        if(s.empty() || height[s.top()] < height[i] ) s.push(i);
        else
        {
            int curr = s.top();
            s.pop();
            res = max(res, height[curr] * (s.empty()?i: i-s.top()-1));
            i--;
        }
    }
    return res;
}
//85
int maximalRectangle(vector<vector<char>>& matrix)
{
    if(matrix.empty() || matrix[0].empty()) return 0;
    int m = matrix.size(), n = matrix[0].size();
    vector<int> height(n,0);
    int res=0;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
            height[j] = matrix[i][j]=='0' ? 0:height[j]+1;
        res = max(res,maximalRectangleHelper(height));
    }
    return res;
}//85

猜你喜欢

转载自www.cnblogs.com/2Bthebest1/p/10834459.html