221. Maximal Square

    xiaoxiao2021-03-25  59

    Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area. For example, given the following matrix: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0

    Return 4.

    一开始想用贪心,但是总觉得想的不太顺,后来用DP。

    每个点的dp值为以该点为右下角做能构成的矩阵最大值。这里的最大值不是面积而是边长。

    需要注意的是第一遍敲的时候,第一,忘记先把两个边界填充好,第二,忘记在填充边界的时候更新maxs,第三,忘记填充过后的循环应该从1开始,第四,忘记返回的是maxs的平方。

    少年仍需努力啊。

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

    转载请注明原文地址: https://ju.6miu.com/read-32579.html

    最新回复(0)