vlambda博客
学习文章列表

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:二维动态规划

 
   
   
 
  1. int F[10001][10001] = { 0 };

  2. class Solution {

  3. public:

  4. int maximalSquare(vector<vector<char>>& Matrix) {

  5. int iMax = Matrix.size();

  6. if (!iMax) return 0;

  7. int jMax = Matrix[0].size();

  8. for (int i = 0; i < iMax; i++)

  9. {

  10. for (int j = 0; j < jMax; j++)

  11. {

  12. F[i + 1][j + 1] = Matrix[i][j] - '0';

  13. }

  14. }

  15. int res = 0;

  16. for (int i = 1; i <= iMax; i++)

  17. {

  18. for (int j = 1; j <= jMax; j++)

  19. {

  20. if (Matrix[i-1][j-1] - '0')

  21. {

  22. F[i][j] = min({ F[i - 1][j], F[i][j - 1], F[i - 1][j - 1] }) + 1;

  23. res = max(F[i][j], res);

  24. }

  25. }

  26. }

  27. return pow(res, 2);

  28. }

  29. };



时间复杂度




————  e n d ————