在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。

示例:

输入: 

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

输出: 4

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximal-square
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

动态规划 二维数组可以降低到一维存储。

一开始就没分析对,但是蒙对了几个测试样例,所以怎么改都不对。

不是 比较 前 中 后 是比较 前 中 和更新前的 前

class Solution {
    int Min(int a,int b){
        if(a<b){return a;}
        return b;
    }
    int Max(int a,int b){
        if(a>b){return a;}
        return b;
    }
public:
    int maximalSquare(vector<vector<char>>& matrix) {
        if(matrix.size()==0){return 0;}
        int maxans=0;
        int pre=0;
        vector<int>num(matrix[0].size());
        for(int a=0; a<matrix.size();a++){
            pre=0;
            for(int b=0;b<matrix[0].size();b++){
                int t=num[b];
                if(matrix[a][b]=='1'){
                    num[b]=Min(pre,num[b]);
                    if(b>0)num[b]=Min(num[b-1],num[b]);
                    num[b]++;
                    maxans=Max(maxans,num[b]);
                }else num[b]=0;
                pre=t;
            }
        }return maxans*maxans;
    }
};