Max Square
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area.
Example
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 0Return4.
Note
长方形往往选左上和右下角的角点开始, 正方形一般选右下角.
(2,3)这个点为右下角点的square的大小, 其实和(1,2)有关, 它最大是(1,2)的squre的边长再加一
那么呢, 我们可以把正方形分成pic5.1图中的几个部分:
对于一个点A, 我们需要看看它左上的点最大的正方形边长, 然后验证它左边连续是1的点的长度和上面连续是1的点的长度, 即
1. for向左都是1的长度
2. for向上都是1的长度
3. for左上点的最大正方形的边长1, 2和3的值中的最小值+1就是结果
其中1和2可以用预处理过得矩阵left[][]和up[][]优化. 这是状态方程是:
接着呢, 我们发现, 其实left和up矩阵是不需要的. 如图pic5.2:

我们发现, A为右下角点的铅笔画大正方形A全为1需要的条件是:
加上
所以我们只需要在左点, 上点和左上点各自最大正方形的边长取最小值, 再加1就行了. 状态方程变成
Code
滚动数组优化
需要多少个状态, 就存多少个.
求第i个状态, 如果只与i-1有关, 那就只需要两个数组. 用previous数组, 推now数组. 所以上一个解法中, j可以都模2.
那i为什么不能模呢? 因为如果i模了的话, 下一行左边开始的时候, 存的还是上一行最右边末尾的值, 不行哒~ 状态方程变为:
其中要注意初始化和答案也要记得模:
初始化 Intialization:
答案 Answer
Last updated