221. Maximal Square

本文介绍了一种使用对分查找方法寻找矩阵中最大的全'1'正方形区域的算法。通过对分查找减少不必要的判断次数,提高搜索效率。具体实现包括判断指定半径内是否存在全'1'的正方形区域,并通过不断调整搜索范围来找到符合条件的最大正方形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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;

    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值