5/8 LeetCode每日一题 221. 最大正方形
在?进来看看码
题面:
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
示例:
输入:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
输出: 4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximal-square
分析:
老DP题了
矩阵中值为1的每一个点构成的正方形边长的状态转移方程为
F[i][j] = min({ F[i - 1][j], F[i][j - 1], F[i - 1][j - 1] }) + 1;
解法1:二维动态规划
int F[10001][10001] = { 0 };
class Solution {
public:
int maximalSquare(vector<vector<char>>& Matrix) {
int iMax = Matrix.size();
if (!iMax) return 0;
int jMax = Matrix[0].size();
for (int i = 0; i < iMax; i++)
{
for (int j = 0; j < jMax; j++)
{
F[i + 1][j + 1] = Matrix[i][j] - '0';
}
}
int res = 0;
for (int i = 1; i <= iMax; i++)
{
for (int j = 1; j <= jMax; j++)
{
if (Matrix[i-1][j-1] - '0')
{
F[i][j] = min({ F[i - 1][j], F[i][j - 1], F[i - 1][j - 1] }) + 1;
res = max(F[i][j], res);
}
}
}
return pow(res, 2);
}
};
时间复杂度
———— e n d ————