在一个由 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;
}
};