最大正方形
给定一个由0和1组成的2维矩阵,返回该矩阵中最大的由1组成的正方形的面积
## 例如:[[1,0,1,0,0],[1,0,1,1,1],[1,1,1,1,1],[1,0,0,1,0]] 返回值:4
class Solution {
public:
/**
* 最大正方形
* @param matrix char字符型vector<vector<>>
* @return int整型
*/
struct maxxy
{
int x;//记录matrix[i][j]的最大行列连续1的个数
int y;
};
int solve(vector<vector<char> >& matrix) {
// write code here
int m=0;//用以记录行和列的最大连续为‘1’的个数
int n=0;
maxxy mid;
vector<vector<maxxy>> ans(matrix.size(),vector<maxxy> (matrix[0].size(),{0,0}));
for(int j=0;j<matrix[0].size();j++)
{
for(int i=0;i<matrix.size();i++)
{
if(matrix[i][j]=='1')
{
m++;
ans[i][j].y=m;
}
else
{
m=0;
}
}
m=0;
}
for(int i=0;i<matrix.size();i++)
{
for(int j=0;j<matrix[0].size();j++)
{
if(matrix[i][j]=='1')
{
n++;
ans[i][j].x=n;
}
else
{
n=0;
}
}
n=0;
}
vector<int> b;
for(int i=0;i<matrix.size();i++)
{
for(int j=0;j<matrix[0].size();j++)
{
int a=min(ans[i][j].x,ans[i][j].y);
if(i==0||j==0)
{
if(a!=0)
{
b.push_back(1);
}
}
else
{
int val=0;
for(int k=0;k<a;k++)
{
if(min(ans[i-k][j-k].x,ans[i-k][j-k].y)>=a-k)
{
val++;
}
}
if(val==a)
{
b.push_back(a);
}
}
}
}
sort(b.begin(),b.end());
int num=b[b.size()-1];
return num*num;
}
};