当前位置:网站首页>力扣221题,最大正方形
力扣221题,最大正方形
2022-08-10 20:59:00 【瀛台夜雪】
力扣221题,最大正方形
题目描述
在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。
输入输出样例

输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:4

输入:matrix = [["0","1"],["1","0"]]
输出:1
输入:matrix = [["0"]]
输出:0
解法一:暴力解法
//使用暴力解法
//遍历矩阵中的每个元素每次遇到1,便将该元素作为正方形的左上角
//确定正方形的左上角,根据左上角所在的行和列计算可能的最大正方形的边长
//判断右下,右,下是否是元素均为1
//时间复杂度为O(mn*min(m,n)^2)
//空间复杂度 为 O(1)
int maximalSquare(vector<vector<char>>&matrix)
{
int rowLength=matrix.size();
int colLength=matrix[0].size();
if(rowLength==0||colLength==0)
{
return 0;
}
//存储当前值的最大边长
int maxSide=0;
//遍历空间中每一个为1的结点
for(int i=0;i<rowLength;i++)
{
for(int j=0;j<colLength;j++)
{
if(matrix[i][j]=='1')
{
maxSide=max(maxSide,1);
//计算当前可能存在的最大边长
int currMaxSide=min(rowLength-i,colLength-j);
//判断右下的值是否存在
for(int k=1;k<currMaxSide;k++)
{
//设置标志位,表明当前的右下,右侧,下侧是否均为1
bool flag=true;
if(matrix[i+k][j+k]=='0')
{
break;
}
//左下验证成功,则验证右侧和下侧是否为1
for(int m=0;m<k;m++)
{
if(matrix[i+k][j+m]=='0'||matrix[i+m][j+k]=='0')
{
flag=false;
break;
}
}
if(flag)
{
maxSide=max(maxSide,k+1);
}
else
{
break;
}
}
}
}
}
int maxSquare=maxSide*maxSide;
return maxSquare;
}
解法二:使用动态规划
//使用动态规划的方法
//动态规划,以右下角作为初值条件,且只包含1的正方形的边长的最大值
//状态转移方程 dp[i]由上方,左方,左上方的dp值决定
//dp[i][j]=min(dp[i-1][j],dp[i-1][j-1],dp[i][j-1])+1
//时复:O(mn)
//空复:O(mn)
int maximalSquare2(vector<vector<char>>&matrix)
{
int rowLength=matrix.size();
int colLength=matrix[0].size();
if(rowLength==0||colLength==0)
{
return 0;
}
//建立动态规划数组
vector<vector<int>>dp(rowLength,vector<int>(colLength,0));
//初始化动态规划数组和转移方程
int maxSides=0;
for(int row=0;row<rowLength;row++)
{
for(int col=0;col<colLength;col++)
{
if(matrix[row][col]=='1')
{
//对row和col的不同位置进行分类讨论
//因为在第一行,第一行无论如何dp的值肯定为1
if(row==0||col==0)
{
dp[row][col]=1;
}
else{
//转移方程
dp[row][col]=min(dp[row-1][col-1],min(dp[row-1][col],dp[row][col-1]))+1;
}
maxSides=max(maxSides,dp[row][col]);
}
}
}
return maxSides*maxSides;
}
边栏推荐
- 带你一文读懂SaaS版多租户商城系统对多品牌企业的应用价值
- In 2021 China industrial Internet security competition (competition) in fujian province and the first industry of fujian province Internet innovation competition
- ArcMap时间滑块功能动态显示图层数据并生成视频或动图
- 我的世界整合包 云服务器搭建方法(ECS)
- sklearn 笔记 TSNE
- 2021年中国工业互联网安全大赛(福建省选拔赛) 暨首届福建省工业互联网创新大赛
- 内置模板市场,DataEase开源数据可视化分析平台v1.13.0发布
- 【golang map】 深入了解map内部存储协议
- shell小技巧(一百三十五)打包指定目录下所用文件,每个文件单独打包
- LeetCode 1-10题
猜你喜欢
随机推荐
双 TL431 级联振荡器
shell小技巧(一百三十五)打包指定目录下所用文件,每个文件单独打包
工程师应该怎么学习
【go】依赖注入
TCL:事务的特点,语法,测试例——《mysql 从入门到内卷再到入土》
扩展中国剩余定理
D. Game With Array
【nvm】【node多版本管理工具】使用说明和踩坑(exit status 1)
C语言系列——猜名次、猜凶手、打印杨辉三角
PostgreSQL — 安装及常用命令
实施MES管理系统前,这三个问题要考虑好
突破次元壁垒,让身边的玩偶手办在屏幕上动起来!
UPDATE:修改数据语法使用例——《mysql 从入门到内卷再到入土》
HGAME 2022 Week2 writeup by pankas
sklearn 笔记 TSNE
【vulhub】MySql身份认证绕过漏洞复现(CVE-2012-2122)
机器学习笔记:t-SNE
npm‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
ACM模板笔记:八数码问题——使用BFS+康托展开打表解决
石油化工行业商业供应链管理系统:标准化供应商管理,优化企业供应链采购流程






![[mysql] 深入分析MySQL版本控制MVCC规则](/img/16/e28641c355d941fda50a6e8b7911ee.png)

![[SWPUCTF 2021 新生赛] web](/img/e9/07e7db7ddf8328589a078e98fd46ad.png)
