221. 最大正方形
1.题目描述
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
示例:
2.思路
动态规划的状态转移方程为:dp[i][j]=min(dp[i-1][j], dp[i-1][j-1], dp[i][j-1])+1,其中dp数组用来存储以第i行第j列元素为右下角的最大正方形的边长,由于输入的矩阵为0-1矩阵,所以输入矩阵可以直接作为我们需要的dp数组,在遍历输入矩阵时可以按照上述状态转移公式原地更改矩阵。
3.代码
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
int maxLen = 0;
for(int i = 0;i < matrix.size();++i){
for(int j = 0;j < matrix[0].size();++j){
if(matrix[i][j] == '1'){
matrix[i][j] = 1;
if(i == 0 || j == 0){
maxLen = max(maxLen,(int)matrix[i][j]);
}
else{
matrix[i][j] = min(min((int)matrix[i-1][j],(int)matrix[i-1][j-1]),(int)matrix[i][j-1]) + 1;
maxLen = max(maxLen,(int)matrix[i][j]);
}
}
else{
matrix[i][j] = 0;
}
}
}
return maxLen*maxLen;
}
};
4.复杂度分析
时间复杂度:O(mn),m,n分别为输入矩阵的长和宽。
空间复杂度:O(1)