85. Maximal Rectangle
problem description
Input:
[
["1","0","1","0","0"],
["1","0","1","1","1"],
["1","1","1","1","1"],
["1","0","0","1","0"]
]
Output: 6algorithm thought
code
class Solution {
public:
int maximalRectangle(vector<vector<char>>& matrix) {
if(matrix.size()==0||matrix[0].size()==0)
return 0;
vector<int> fromleft(matrix[0].size(),0);
vector<int> fromright(matrix[0].size(),matrix[0].size());
vector<int> height(matrix[0].size(),0);
int res=0;
for(int i=0;i<matrix.size();++i){
int curleft=0;
for(int j=0;j<matrix[0].size();++j){
if(matrix[i][j]=='0'){
curleft=j+1;
fromleft[j]=0;
}else{
fromleft[j]=max(fromleft[j],curleft);
}
}
int curright=matrix[0].size()-1;
for(int j=matrix[0].size()-1;j>=0;--j){
if(matrix[i][j]=='0'){
curright=j-1;
fromright[j]=matrix[0].size()-1;
}else{
fromright[j]=min(fromright[j],curright);
}
}
for(int j=0;j<matrix[0].size();++j){
if(matrix[i][j]=='0'){
height[j]=0;
continue;
}
height[j]++;
res=max(res,height[j]*(fromright[j]-fromleft[j]+1));
}
}
return res;
}
};algorithm analysis
Last updated