Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area.
For example, given the following matrix:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
Return 6.
思路: 依次处理每一行,每一行记录从行开始到当前点连着的1的个数,当期元素为0的话则直接为0;然后依次遍历非0的元素的上面值非0的行,找到对应最小的值,然后将其乘以长度并更新最大值.
还有一个思路: 从第一行开始,记录当前节点的高度值,然后转换成第84题,然后求连续的矩阵最大面积值.
<span style="font-size:14px;">public class Solution {
public int maximalRectangle(char[][] matrix) {
if(matrix==null)
return 0;
int m=matrix.length;
if(m==0)
return 0;
int n=matrix[0].length;
int[][] num=new int[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(matrix[i][j]=='1'){
if(j==0)
num[i][j]=1;
else
num[i][j]=num[i][j-1]+1;
}
}
}
int max=0,min,min1=0,temp;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(num[i][j]>0){
temp=i-1;
min=num[i][j];
max=min>max?min:max;
while(temp>=0&&num[temp][j]>0){
min=num[temp][j]<min?num[temp][j]:min;
min1=(i-temp+1)*min;
max=min1>max?min1:max;
temp--;
}
}
}
}
return max;
}
}</span>