当前位置: 首页 > news >正文

实用指南:力扣2132. 用邮票贴满网格图

在这里插入图片描述
在这里插入图片描述

这一题的大意是给出一个网格图,是一个mn的二进制矩阵,为0表示为空,为1表示为占据。现在往里面贴邮票,贴邮票的规则是:
覆盖所有空格子。
不覆盖任何被占据的格子。
我们允许放入任意数目的邮票。
通过邮票能够相互有重叠部分。
邮票不允许旋转 。
邮票必须完全在矩阵内 。

邮票的长宽为:stampHeight x stampWidth
试图往这个格子里面贴满邮票,如果许可贴满,就返回true,否则返回false。就是现在的目标
大家根据规则,行知道要想贴满,我们只能从一个个符合邮票的子矩阵中试,看能不能往里面贴,也即在这个子矩阵中有没有被占据的格子,如果可以,就往里面贴邮票。
根据题目上给出的数据范围,我们知道O(m
n)<=2*10^ 5 ,m,n <=2 * 10^5
因此我们只能用双重for循环,对矩阵进行遍历一次来实现目标。
暴力不行,这一题很明显允许看出需要前缀和+差分的优化,
检查子矩阵中有没有被占据的格子,可以用二维前缀和计算子矩阵的面积来表示,因为是二进制矩阵,只需要子矩阵的面积==0就表示该子矩阵是许可被贴邮票的
通过贴邮票的过程,我们能够用差分数组来表示,这样完美的只必须n * m的时间复杂度

for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+grid[i-1][j-1];
}
}
for(int i=0;i+stampHeight-1<n;i++)
{
for(int j=0;j+stampWidth-1<m;j++)
{
//这里应该求子矩阵的面积
if(sum[i+stampHeight][j+stampWidth]-sum[i+stampHeight][j]-sum[i][j+stampWidth]+sum[i][j]==0)
{
//说明可以放邮票
d[i+1][j+1]+=1;
d[i+stampHeight+1][j+1]-=1;
d[i+1][j+stampWidth+1]-=1;
d[i+stampHeight+1][j+stampWidth+1]+=1;
}
}
}

然后我们只应该对差分数组进行求一个前缀和即可得到贴上邮票后的矩阵的各个值,
大家只需要表示出每一个点的差分数组的前缀和的值不大于0(说明没有被贴邮票)并且该点原本的二进制矩阵的值也为0(说明该点也没有被占据),那么就说明该点既没有被贴邮票,也没有被占据,就返回false。反之返回true
时间复杂度为O(n*m)
注意:1.在计算子矩阵的时候要注意边界条件,实际上这一题也可以参考:

力扣1895. 最大的幻方
1895只运用了二维前缀和,但我觉得思想实际上还是挺像的,本题多用了二维差分。应该还有类似的题目,我做的题目比较少。

2.差分数组的前缀和数组,并不是表示的是面积,而是每一个点经过差分后的值,基于我总把差分数组的前缀和数组用sum表示,导致曲解了它的意思。
一样的。就是3.这种子矩阵的题要多总结,套路实际上

http://www.jsqmd.com/news/2020/

相关文章:

  • 安全向量模板类SiVector - 实践
  • ONCHAINID源码分析(二)
  • 最佳三维文件格式,以及怎么在线浏览编辑FBX/OBJ/GLB/GLTF
  • ChatGPT 在招聘诈骗领域的应用
  • FR报表下拉框高度(JS添加css样式方式)调整
  • 基于Python+Vue开发的新闻管理系统源码+运行步骤
  • 鸿蒙应用开发从入门到实战(十二):ArkUI组件ButtonToggle
  • Spring框架中的注解主要有哪些
  • 领码优秀的方案|Spring Boot 异步请求深度剖析:从原理到 AI 驱动的吞吐量优化
  • 从视觉、文案到交互:三步彻底去除产品AI味
  • 理解WPF Stylet中Command={s:Action 方法名}的设计与实现
  • 帆软报表下拉框高度(JS添加css样式方式)调整
  • 探索 12 种 3D 文件格式:综合指南
  • 剑指offer-32、把数组排成最⼩的数
  • 强化学习算法如何控制人形机器人行走的 —— 策略映射动作,动作如何控制电机?
  • CG-65 剖面细管式温度传感器 可实时监测不同土层温度动态
  • list集合根据某字段获取某个对象
  • .NET STS 版本支持 24 个月
  • 后缀数组基础 Suffix Array
  • 完整教程:第33章 AI在教育领域的应用
  • python微博舆情分析系统 情感分析 爬虫 机器学习 新浪微博 信息采集 大数据工艺(源码)✅
  • 易软通openWMS - 功能齐全的开源WMS
  • C# 中的 ReferenceEquals 方法 - 教程
  • 【一周AI资讯】Claude自动抓取网页;美团发布生活Agent;阿里通义发布双模型 - 详解
  • Vue2 父子组件传值(简化版示例) - 详解
  • 遇到一件循环导入事件
  • flask实现后端接口的封装和开发部分
  • 第四章 Arm C1-Premium 核心电源管理工艺解析
  • litserve openapi schema 处理简单说明
  • 上海这样的地段简直是逆天