232

问答题 232 /376

手撕代码:0-1矩阵的最大正方形

参考答案

参考回答:

public int maxSquare(int[][] matrix) {

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;
}