链接:https://leetcode-cn.com/problems/maximal-square/
当一个数组内一个元素为1时,以它为右下角的正方形的边长为这个元素左上,左,上三个点内构成的正方形的边长的最小值+1。
代码的空间复杂度为
O
(
n
2
)
O(n^2)
O(n2)实际可以空间优化成为
O
(
n
)
O(n)
O(n)。
java代码:
class Solution {
public int maximalSquare(char[][] matrix) {
int ans = 0;
int m = matrix.length;
if(m==0)
return 0;
int n = matrix[0].length;
int dp[][] = new int [m][n]; //存储的是正方形边长
for(int i = 0;i<m;i++)
{
for(int j = 0;j<n;j++)
{
if(matrix[i][j]=='1')
{
if(i==0||j==0)
dp[i][j] = 1;
else
dp[i][j] = Math.min(dp[i-1][j-1],Math.min(dp[i][j-1],dp[i-1][j]))+1;
if(dp[i][j]>ans)
ans = dp[i][j];
}
}
}
return ans*ans;
}
}