LeetCode 221. 最大正方形

leetcode acwing

动态规划 \(O(n)\)

image-20210105094007612

C++ 代码

class Solution {
public:
    int maximalSquare(vector<vector<char>>& matrix) {
        int n = matrix.size();
        int m = 0;
        if (n) m = matrix[0].size();
        else return 0;

        int f[n + 1][m + 1];
        memset(f, 0, sizeof f);
        
        int res = 0;
        for (int i = 1; i <= n; i ++)
        {
            for (int j = 1; j <= m; j ++)
            {
                if (matrix[i - 1][j - 1] == '1')
                {
                    f[i][j] = min(f[i - 1][j], min(f[i][j - 1], f[i - 1][j - 1])) + 1;
                    res = max(res, f[i][j]);
                }
            }
        }

        // 返回面积
        return res * res;
    }
};
posted @ 2021-01-05 09:42  alexemey  阅读(65)  评论(0)    收藏  举报