<leetcode c++>221. 最大正方形

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

 

class Solution {
public:
    int maximalSquare(vector<vector<char>>& matrix) {
        int m=matrix.size();
        if(m==0)return 0;
        int n=matrix[0].size();
        vector<int> dp(n,0);
        
        int maxEdge=0;
        dp[0]=matrix[0][0]-'0';
        for(int i=0;i<m;i++){
            int k=dp[0];
            dp[0]=matrix[i][0]-'0';
            maxEdge=max(maxEdge,dp[0]);
            for(int j=1;j<n;j++){
                int tmp=dp[j];
                dp[j] = matrix[i][j]!='0' ? min(dp[j-1],min(dp[j],k))+1:0;
                maxEdge=max(maxEdge,dp[j]);
                k=tmp;
            }
        }
        
        return maxEdge*maxEdge;
    }
};

 

posted @ 2020-04-25 10:52  鳄鱼四驱车  阅读(288)  评论(0编辑  收藏  举报