Maximal Square
题目描述
Given a 2D binary matrix filled with 0’s and 1’s, find the largest square containing only 1’s and return its area.
Example:
Input:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
Output: 4
解题思路
本题要在一个01矩阵中找到一个最大方阵的面积,这个方阵包含的都是1.
思路一: 考虑到一个方阵的面积取决于它的右下角能够到达哪里,于是我用一个相同大小的矩阵v,v[i][j]表示以i,j为右下角的方阵的最大边长,于是得到状态方程:当矩阵的第i行第j列元素为1时,v[i][j] = min(v[i-1][j], v[i][j-1], v[i-1][j-1]) + 1;当矩阵的第i行第j列元素为0时,v[i][j] = 0。并在一开始将矩阵v的第一行和第一列初始化,矩阵v的值与01矩阵对应值相等,整个算法的空间复杂度与时间复杂度均为\(O(nm)\)。
思路二: 考虑到实际上每次计算v[i][j]的值时,只需要用到v[i-1][j], v[i][j-1], v[i-1][j-1],所以实际上可以只用一个大小为n+1的数组存储,将空间复杂度降为\(O(n)\)。
源代码
思路一
1 | class Solution { |
思路二
1 | class Solution { |