7 最大的以1为边界的正方形

来源:LeetCode第1139题

难度:中等

描述:给你一个由若干0和1组成的二维网格grid,请你找出边界全部由1组成的最大正方形子网格,并返回该子网格中的元素个数,若不存在,则返回0;

思路:申请三个空间,第一个二维空间dp1[i][j],这个空间表示第i行第j列在[i][j]这个位置前面(左边)连续1的个数包括自己。第二个二维空间dp2[i][j],这个空间表示第i行第j列在[i][j]这个位置上面联系1的个数包括自己。第三个二维空间dp3[i][j]表示以[i][j]为右下角的最大正方形边长。

//首先定义一个函数,输入值时grid的二维数组,返回值是最大正方形元素的个数
public int maxSquare(int [][]grid)
{
//求grid矩阵的行数
int row=grid.length;
//求grid矩阵的列数,默认为长方形
int column=grid[0].length;
//生成3个动态数组
//第一个动态数组dp1[i][j]表示[i][j]位置处左边连续1的个数
int [][]dp1=new int[row][column];
//第二个动态数组dp2[i][j]表示[i][j]位置处上方连续1的个数
int [][]dp2=new int[row][column];
//第三个动态数组dp3[i][j]表示以[i][j]为右下角的最大正方形面积,围成的最大正方形边长*边长
int [][]dp3=new int[row][column];
//首先进行dp1[i][j]数组第一列的初始化,若第一个元素为1,则dp1[i][0]=1,否则dp1[i][0]=0;
for(int i=0;i<grid.length;i++)
{
if(grid[i][0]==1)
{
dp1[i][0]=1;
}else
{
dp1[i][0]=0;
}
}
//其次进行dp2[i][j]数组第一行的初始化,若第一个元素为1,则dp2[0][i]=1,否则dp2[0][i]=0;
for(int i=0;i<grid[0].length;i++)
{
if(grid[0][i]==1)
{
dp2[0][i]=1;
}else
{
dp2[0][i]=0;
}
}
//进行dp1[i][j]动态数组的递推公式,如果grid[i][j]==1,则dp1[i][j]=dp1[i][j-1]+1,否则为0
for(int i=0;i<grid.length;i++)
{
for(int j=1;j<grid[i].length;j++)
{
if(grid[i][j]==1)
{
dp1[i][j]=dp1[i][j-1]+1;
}else
{
dp1[i][j]=0;
}
}
}
//进行dp2[i][j]动态数组的递推公式,如果grid[i][j]==1,dp2[i][j]=dp[i-1][j]+1;,否则为0
for(int i=1;i<grid.length;i++)
{
for(int j=0;j<grid[i].length;j++)
{
if(grid[i][j]==1)
{
dp2[i][j]=dp[i-1][j]+1;
}else
{
dp2[i][j]=0;
}
}
}
//进行dp3[i][j]动态数组第一列的初始化,若对应位置为1,则dp3[i][0]=1;
for(int i=0;i<grid.length;i++)
{
if(grid[i][0]==1)
{
dp3[i][0]=1;
}else
{
dp3[i][0]=0;
}
}
//进行dp3[i][j]动态数组第一行的初始化,若对应位置为1,则dp3[0][i]=1;
for(int i=1;i<grid[0].length;i++)
{
if(grid[0][i]==1)
{
dp3[0][i]=1;
}else
{
dp3[0][i]=0;
}
}
//定义变量maxsize表示从[i][j]位置上下寻找到的最大正方形边长
int maxside=0;
//记录最大的正方形边长,并最后返回
int maxsquqre=0;
for(int i=1;i<grid.length;i++)
{
for(int j=1;j<grid[i].length;i++)
{
//如果grid[i][j]==0,则以[i][j]无法构成正方形,dp3[i][j]=0;
if(grid[i][j]==0)
{
dp3[i][j]=0;
}else
{
//从[i][j]位置左边和上边寻找最小连续1的个数,从而可以构成最大边长
maxside=Math.min(dp1[i][j],dp2[i][j]);
for(int i=maxside;i>=0;i--)
{
//不断由最大变成找到最左边的位置[i][j-maxsize+1]并且求解该位置竖向上方1的个数dp2[i][j-maxsize+1],找到最上边的位置[i-maxsize+1][j]并且求解该位置左边连续1的个数,如果均大于maxsize,表示能构成正方形,否则继续缩小maxsize,不断进行寻找,一旦找到满足条件的,记录入dp3中,并与maxsquare进行对比后break跳出循环
if(dp2[i][j-maxsize+1]>=maxsize&&dp1[i-maxsize+1][j]>=maxsize)
{
dp3[i][j]=i*i;
maxsquare=Math.max(maxsquare,dp3[i][j]);
break;
}
}
}
}
}
return maxsqure;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/177400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EasyExcel实现Excel百万级数据导入导出

1.1 模拟500w数据导出 需求&#xff1a;使用EasyExcel完成500w数据的导出。 500w数据的导出解决思路&#xff1a; 首先在查询数据库层面&#xff0c;需要分批进行查询&#xff08;比如每次查询20w&#xff09; 每查询一次结束&#xff0c;就使用EasyExcel工具将这些数据写入一…

【SpringBoot篇】使用Spring Cache高效处理缓存数据

文章目录 &#x1f339;简述Spring Cache&#x1f3f3;️‍&#x1f308;常用注解&#x1f33a;使用SpringCache&#x1f6f8;Cacheable注解⭐测试 &#x1f6f8;CacheEvict&#x1f38d;一次清理一条数据&#x1f38d;一次删除多条数据 Spring Cache是一个框架,只要简单加一个…

宠物网站的技术 SEO:完整指南

您是宠物行业网站的从业者吗&#xff1f;那么您一定知道&#xff0c;当人们寻找与宠物相关的资源时&#xff0c;在搜索引擎结果中排名靠前有多么重要。 这就是技术SEO的用武之地&#xff01;它正在调整您网站的后端代码和服务器配置&#xff0c;以在 SERP 中排名更高。 在此&…

redis的集群,主从复制,哨兵

redis的高可用 在Redis中&#xff0c;实现高可用的技术主要包括持久化、主从复制、哨兵和集群&#xff0c;下面分别说明它们的作用&#xff0c;以及解决了什么样的问题。 持久化&#xff1a; 持久化是最简单的高可用方法&#xff08;有时甚至不被归为高可用的手段&#xff09;…

splice()方法

splice(index,len,item)是vue中数组变异的方法之一&#xff0c;可以用来删除&#xff0c;更新&#xff0c;和增加数组内容参数: index&#xff1a;数组下标 len&#xff1a;替换/删除的长度 item&#xff1a;更新或增加的内容使用方法&#xff1a; 1、删除&#xff0c;当参数形…

SQL优化的总结

1. 编写高效的 SQL 语句 1.1 合理使用索引 - **索引类型&#xff1a;** 解释不同类型的索引&#xff08;B-Tree、哈希索引等&#xff09;的作用和适用场景。 - **选择和创建索引&#xff1a;** 根据查询需求和数据分布选择合适的列创建索引&#xff0c;避免过多或不必要的索…

2019年9月26日: Go生态洞察:发布Go模块

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

如何保护 API 安全

为了收集有关 API 管理当前和未来状态的见解&#xff0c;我们邀请来自 18 家公司的 IT 专业人士分享他们的想法。我们问他们&#xff1a;“哪些技术和工具对于保护 API 最有效&#xff1f;” 他们告诉我们的是&#xff1a; 验证 我们经常向已知的 B2B 合作伙伴提供 API 访问权…

JavaScript创建枚举

相比直接写数字与字符串值&#xff0c;用枚举表示预定义范围的常量值有很多优点&#xff0c;这里就不做赘述了&#xff0c;但目前为止javascript并没有提供原生的enum类型&#xff08;typescript当然就支持&#xff09;&#xff0c;通常javascript会借助对象类型来等效实现enum…

lightdb substr函数支持浮点类型

背景 在信创适配中&#xff0c;从ORACLE迁移过来的程序使用了substr函数。 LightDB 23.4版本对该函数进行了增强。支持位置参数和长度参数使用number类型。 示例 使用substr(text, numeric, numeric)函数 declareline varchar(300) : 312456789009876543001000.00;acct va…

mac解压gz文件

我发现一个问题&#xff0c;比如我从GSE144136里下载的文件 这个结果是这样的&#xff0c;直接双击是没有用的 因此需要使用命令行 gzip -d GSE144136_GeneNames.csv.gz

猜数字游戏

需求目标 这个游戏窗口要求玩家猜一个1到100之间的数字。玩家可以在文本框中输入自己的猜测&#xff0c;并点击提交按钮进行验证。游戏会给出相应的提示&#xff0c;直到玩家猜中正确的数字为止。 效果 源码 /*** author lwh* date 2023/11/28* description 猜数字游戏**/ i…

基于springboot房地产项目设计流程管理系统

一、需求描述 该项目针对某房地产效果图公司的项目流程进行信息化管理。其目标是使得该公司的管理人员、普通员工、前台、能够对项目、员工&#xff08;包括主管&#xff09;、财务、工作业绩以及客户进行全方位的管理&#xff0c;并在此基础上能够挖掘员工潜力&#xff0c;能够…

C语言——输入 10 个数,分别统计其中正数、负数、零的个数

#include <stdio.h> int main() {int numbers[10]; // 存储输入的10个数int positive_count 0; // 正数计数器int negative_count 0; // 负数计数器int zero_count 0; // 零计数器// 输入10个数printf("请输入10个数&#xff1a;\n");for (int i 0; i …

AMP State Evolution的计算:以伯努利-高斯先验为例

AMP State Evolution (SE)的计算 t 1 t1 t1时&#xff0c; E ( t ) E [ X 2 ] \mathcal E^{(t)} \mathbb E [X^2] E(t)E[X2]&#xff0c;SE的迭代式为 τ r ( t ) σ 2 1 δ E ( t ) E ( t 1 ) E ∣ η ( t ) ( X Z ) − X ∣ 2 , Z ∼ N ( 0 , τ r ( t ) ) \begin{a…

HarmonyOS应用开发者基础认证考试(90分过)

此博文为HarmonyOS应用开发者基础认证考试的最后的大考&#xff0c;要求100分取得90分方可获取证书、现将考试的题库进行分享&#xff0c;希望能帮到大家。但是需要注意的是&#xff0c;题库会不定时的进行题目删减&#xff0c;但是大概的内容是不会进行改变的。真心希望这篇博…

历时三个月,我发布了一款领取外卖红包小程序

近几年&#xff0c;推广外卖红包爆火&#xff0c;各种推广外卖红包的公众号层出不穷。于是&#xff0c;我就在想外卖红包究竟是怎么一回事。就这样&#xff0c;我带着问题开始了关于外卖红包的研究。 在研究的过程中&#xff0c;我开始了解隐藏优惠券、cps等一系列相关的术语。…

9个AI视频后期处理神器——Runway 全功能超详细使用教程(3)

前面2期内容&#xff0c;主要给大家重点介绍了Runway视频生成技术的核心产品功能板块Gen1、Gen2、FI使用教程&#xff0c;还没有看过的小伙伴可以回看往期文章。除了视频生成AI技术外&#xff0c;Runway还具有图片、视频后期处理30多项单个功能&#xff0c;例如视频修复、视频主…

用Elasticsearch搜索匹配功能实现基于地理位置的查询

1.Redis,MongoDB,Elasticsearch实现地理位置查询比较 1.1 Redis: 优点&#xff1a;Redis提供了地理空间索引功能&#xff0c;可以通过Geo数据类型进行地理位置查询。这使得Redis在处理地理位置查询时非常高效。 缺点&#xff1a; Redis的地理空间索引功能相对简单&#xff0…

融云筑基,移动云加速构建高性能智能算力底座

自2022年11月以来&#xff0c;全球大模型数量迅速增加&#xff0c;以ChatGPT为代表的大模型已经成为世界数字科技领域新热点。大模型带来的算力需求迅速增长&#xff0c;未来智算场景将会有非常大的突破空间。 在“十四五”规划的指引下&#xff0c;各地政府积极投入智算中心建…