题目
思路与算法
- 直接暴力即可:从第一行开始遍历,找到当前为1的位置,此时判断当前行的后面的列,找到当前行下一个不为1的列时获得当前最大宽度,然后在此宽度下进行行的遍历,下面的行对应的这几列数字,如果出现0,则直接返回上一行结束时的最大值,如果没有出现0,则max更新为:增加当前宽度后的值。按照此思路来实现即可。
代码实现
class Solution {
public int maximalRectangle(char[][] matrix) {
int res = 0;
for (int i = 0; i < matrix.length; i++){
for (int j = 0; j < matrix[0].length; j++){
if(matrix[i][j] == '1'){
int tmp = j;
for (;tmp < matrix[0].length;tmp++){
if(matrix[i][tmp] == '1'){
res = Math.max(res,getMax(i,j,tmp,matrix));
}else{
break;
}
}
}
}
}
return res;
}
private static int getMax(int i,int j,int tmp,char[][] matrix){
int len = tmp - j + 1;
int aera = len;
for (int k = i+1; k < matrix.length;k++){
for (int l = j; l <= tmp; l++){
if(matrix[k][l] == '0'){
return aera;
}
}
aera += len;
}
return aera;
}
}
复杂度分析