221. Maximal Square

来源:互联网 发布:ubuntu 16.04 wine qq 编辑:程序博客网 时间:2024/06/11 21:30

超级暴力解法,但是采用对分的思路减少判断的次数。

class Solution {public:    bool judgeArea(int x,int y,int radia,vector<vector<char>>& matrix)    {        for(int i=x;i<x+radia;i++)        {            for(int j=y;j<y+radia;j++)            {                if(matrix[i][j]!='1')                    return false;            }        }        return true;    }    bool judge(int radia,vector<vector<char>>& matrix)    {        if(radia==0)            return true;        for(int x=0;x<=matrix.size()-radia;x++)        {            for(int y=0;y<=matrix[0].size()-radia;y++)            {                if(judgeArea(x,y,radia,matrix))                    return true;            }        }        return false;    }    int maximalSquare(vector<vector<char>>& matrix) {        if(matrix.size()==0||matrix[0].size()==0)            return 0;        int m=matrix.size();        int n=matrix[0].size();        //radia        int left=0;        int right=min(m,n);        //cout<<judge(3,matrix)<<endl;        while(right-left>1)        {            int mid=left+(right-left)/2;            if(judge(mid,matrix)==true)                left=mid;            else                right=mid-1;        }        if(judge(right,matrix)==true)            return right*right;        else if(judge(left,matrix)==true)            return left*left;        else            return 0;    }};
0 0