在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。
提交了好多次才过,每次都有特别简单的案例没过,好在这题好像数据量不大,真的每次一看到最大矩阵最大矩形最大正方形就头大,什么单调栈动态规划是学不会了只好有点暴力的解法了只击败了5%。。。。
class Solution {
public:
int maxarea=0;
int maximalSquare(vector<vector<char>>& matrix) {
int m=matrix.size();
int n=matrix[0].size();
int dp[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(matrix[i][j]=='1')maxarea=1;
if(j==0){
matrix[i][j]=='1' ? dp[i][j]=1:dp[i][j]=0;
}
else{
matrix[i][j]=='1'?dp[i][j]=dp[i][j-1]+1:dp[i][j]=0;
}
}
}
for(int i=m-1;i>=0;i--){
for(int j=0;j<n;j++){
int a=dp[i][j];
for(int k=i-1;k>=0;k--){
a=min(dp[k][j],a);
int b=i-k+1;
int bianchang=min(a,b);
maxarea=max(maxarea,bianchang*bianchang);
}
}
}
return maxarea;
}
};