分析:这道题反正我是想不出来,直接看的网友的解题思路,核心思想是将矩阵中1的个数转化成直方图,而直方图在leetcode-84中已经有了解题方案。怎么想到这个方法的,不知道,,,
如何将其转化为直方图?初始元素为0,对每一行,每一列中的每一个元素,如果为1,height[j]++,如果为0,height[j]为0;,这样对于每一行,都找到了最大值。
代码如下:28ms
class Solution {
public:
int maxAreaHistograms(int *height,int length){
int max = 0;
stack<int> stack;
int i = 0;
while(i<length){
if(stack.empty()||height[stack.top()]<height[i])
stack.push(i++);
else{
int index = stack.top();
stack.pop();
int area = height[index]*(stack.empty()?i:i-stack.top()-1);
if(area>max)
max = area;
}
}
return max;
}
int maximalRectangle(vector<vector<char>>& matrix) {
int row = matrix.size();
if(row<=0)
return 0;
int col = matrix[0].size();
if(col<=0)
return 0;
int *heights = new int[col+1]();
heights[col] = 0;
int maxArea = 0;
for(int i = 0;i<row;i++){
for(int j = 0;j<col;j++){
if(matrix[i][j]=='1')
heights[j]++;
else
heights[j] = 0;
}
int area = maxAreaHistograms(heights,col+1);
if(area>maxArea)
maxArea = area;
}
delete[] heights;
return maxArea;
}
};