其他分享
首页 > 其他分享> > leetcode-华为专题-221. 最大正方形

leetcode-华为专题-221. 最大正方形

作者:互联网

 

 

三面列举了三种不同最小值所在的位置,可以看出只要当前元素为1,那么dp[i][j]就等于左上,左、上,中的最小值加1。

比如图一种最小值为3。问号所在位置元素为1,那么dp问号处的值就为4,因为当取三者最小值的时候,其余两个4,4所在位置的元素肯定为1。不然此处的dp值肯定比3还小。

 

class Solution {
public:
    int maximalSquare(vector<vector<char>>& matrix) {
        int m = matrix.size();
        int n = matrix[0].size();
        vector<vector<int>> dp(m,vector<int>(n,0));
        int maxval = INT_MIN;
        // dp[i][j]: 包含matrix[i][j]在内的最大正方形的边长
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                if(matrix[i][j] == '1'){
                    if(i==0||j==0) // 左、上边界,且当前元素为1,则 dp[i][j]为1
                        dp[i][j] = 1;
                    else
                        dp[i][j] = min(dp[i][j-1],min(dp[i-1][j-1],dp[i-1][j]))+1;
                }
                maxval = max(maxval, dp[i][j]);
            }
        }
        return maxval*maxval;
    }
};

 

标签:maxval,matrix,int,最小值,华为,vector,221,leetcode,dp
来源: https://www.cnblogs.com/ymec/p/15156437.html