LeetCode 1139. 最大的以 1 为边界的正方形 (DP)

最大的以 1 为边界的正方形
记录每个点向左最多有多少个1,向上最多有多少个1,然后每个点再用 O ( n ) O(n) 的开销去统计即可。

class Solution {
public:
    int largest1BorderedSquare(vector<vector<int>>& a) {
        int m = a.size(), n = a[0].size() ,ans = 0;
        vector<vector<vector<int>>> dp(m+1,vector<vector<int>>(n+1,{0,0}));
        for(int i=1;i<=m;i++){
            for(int j=1;j<=n;j++){
                if(a[i-1][j-1]==1){
                    dp[i][j][0] = dp[i][j-1][0]+1;
                    dp[i][j][1] = dp[i-1][j][1]+1;
                    int len = min(dp[i][j][0],dp[i][j][1]);
                    for(int k=1;k<=len;k++){
                        if(dp[i][j-k+1][1]>=k && dp[i-k+1][j][0]>=k ){
                            ans = max(ans,k*k);
                        }
                    }
                }
            }
        }
        return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_44846324/article/details/107552918
今日推荐