给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
示例:
输入:
[
[“1”,“0”,“1”,“0”,“0”],
[“1”,“0”,“1”,“1”,“1”],
[“1”,“1”,“1”,“1”,“1”],
[“1”,“0”,“0”,“1”,“0”]
]
输出: 6
class Solution {
int maxRectangle(vector<int> &vecTmp)
{
int maxArea = -1;
stack<int> sta;
vecTmp.push_back(-1);
for(int i = 0; i < vecTmp.size(); i++)
{
while(!sta.empty() && vecTmp[i] < vecTmp[sta.top()])
{
int height = vecTmp[sta.top()];
sta.pop();
int weight = (sta.empty() ? i : i-sta.top()-1);
maxArea = max(maxArea, height*weight);
}
sta.push(i);
}
return maxArea;
}
public:
int maximalRectangle(vector<vector<char>>& matrix) {
if(matrix.size() == 0 || matrix[0].size() == 0) return 0;
int rowSize = matrix.size();
int colSize = matrix[0].size();
vector<int> vecTmp(colSize, 0);
int maxArea = -1;
for(int i = 0; i < rowSize; i++)
{
for(int j = 0; j < colSize; j++)
{
if(matrix[i][j] == '1')
{
vecTmp[j]++;
}
else
{
vecTmp[j] = 0;
}
}
maxArea = max(maxArea, maxRectangle(vecTmp));
}
return maxArea;
}
};
根据84题求柱状图的最大矩形,从上往下按行遍历,从而找出最大的矩形,注意碰到‘0’时,矩阵这一列清零