手撕代码:0-1矩阵的最大正方形
参考回答:
int row = matrix.length; //行大小
int line = matrix[0].length; //列大小
//一个与matrix相同大小的辅助数组
int[][] tmp = new int[row][line];
//将matrix的第一行和第一列元素直接存放到
for(int i=0;i<row;i++){
tmp[i][0] = matrix[i][0];
}
for(int i=0;i<line;i++){
tmp[0][i] = matrix[0][i];
}
for(int i=1;i<row;i++){
for(int j=1;j<line;j++){
if(matrix[i][j] == 1){
tmp[i][j] =
Math.min(Math.min(tmp[i-1][j],tmp[i][j-1]),tmp[i-1][j-1]) + 1;
}
if(matrix[i][j] == 0){
tmp[i][j] = 0;
}
}
} int max=0; //记录tmp中最大元素的值(tmp中元素值表示正方形的边长)
for(int i=0;i<row;i++){
for(int j=0;j<line;j++){
if(tmp[i][j] > max){
max = tmp[i][j];
}
}
}
return max*max;
}