在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
示例:
输入:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
输出: 4
tips:二维动态规划,递推方程:
dp[i][j]=min(dp[i-1][j-1],dp[i][j-1],dp[i-1][j])
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
if(matrix.size()<=0) {
return 0;
}
int max_edge=0;
vector<vector<int>> dp(matrix.size(),vector<int>(matrix[0].size(),0));
for (int i = 0; i < matrix.size(); i++)
{
for (int j = 0; j < matrix[0].size(); j++)
{
if(i==0||j==0) {
if(matrix[i][j]=='1') {
dp[i][j]=1;
if(dp[i][j]>max_edge) {
max_edge=dp[i][j];
}
} else {
dp[i][j]=0;
}
} else if(matrix[i][j]=='1') {
int min_two=min(dp[i][j-1],dp[i-1][j]);
dp[i][j]=min(min_two,dp[i-1][j-1])+1;
if(dp[i][j]>max_edge) {
max_edge=dp[i][j];
}
}
}
}
return max_edge*max_edge;
}
};
本文介绍了一种在二维矩阵中寻找只包含1的最大正方形并计算其面积的算法。通过二维动态规划方法,利用递推方程dp[i][j]=min(dp[i-1][j-1],dp[i][j-1],dp[i-1][j]),实现高效求解。
2963

被折叠的 条评论
为什么被折叠?



