Description:
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.
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 0
Return 4.算法分析:
我們考慮brute force的方法,這種方法的機理就是就是把數組中每一個點都當成正方形的左頂點來向右下方掃描,來尋找最大正方形。具體的掃描方法是,確定了左頂點後,再往下掃的時候,正方形的豎邊長度就確定了,只需要找到橫邊即可,這時候我們使用直方圖的原理,從其累加值能反映出上面的值是否全爲1。通過這種方法我們就可以找出最大的正方形。
代碼如下:
#include<vector>
class Solution{
public:
int maximalSquare(vector<vector<char>& matrix>){
int res = 0;
for(int i=0; i<matrix.size();++i){
vector<int> v(matrix.size(),0);
for(int j=i;j<matrix.size();++j){
for(int k=0;k<matrix[j].sieze();++k){
if(matrix[j][k]=='1')
++v[k];
}
res = max(res,getSquareArea(v,j-i+1));
}
}
return res;
}
int getSquareArea(vector<int>&v,int k){
if(v.size()<k)
return 0;
for count = 0;
for(in i=0;i<v.size();++i){
if(v[i]!=k) count = 0;
else ++count;
if(count ==k)return k*k;
}
}