最大正方形
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
示例:
输入:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
输出: 4
思路+代码+注释:
public int maximalSquare(char[][] matrix) {
/*
思路:把每一行当做第一行开始统计每一列的1的个数,然后看有没有对应行数的连序列的1的个数等于行数,如果有那么最大正方形为行*行,如果没有证明该种情况后面不会存在有连序列的个数以及每列1的个数等于行数的情况,
直接将下一行当作第一行开始下一种情况
*/
if (matrix.length==0)
{
return 0;
}
int n=matrix.length;
int m=matrix[0].length;
int max=0;
for (int i = 0; i < n; i++) {
int[] nums=new int[m];
for (int j = i; j < n; j++) {
for (int k = 0; k < m; k++) {
if (matrix[j][k]=='1')
{
nums[k]++;
}
}
int maxMian=getMaxMian(nums,j-i+1);
if (maxMian==0)
{
break;
}
if (max<maxMian)
{
max=maxMian;
}
}
}
return max;
}
private int getMaxMian(int[] nums,int row)
{
for (int i = 0; i <= nums.length-row; i++) {
boolean isFound=true;
int num=nums[i];
if (num!=row)
{
continue;
}
for (int j = 1; j < row; j++) {
int n=nums[i+j];
if (n!=num)
{
isFound=false;
break;
}
}
if (isFound)
{
return row*row;
}
}
return 0;
}