题目
给定一个填充了 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;
}
};