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

力扣2132.用邮票贴满网格图

力扣2132.用邮票贴满网格图

  • 二维差分 + 二维前缀和

    • 对于一个可以贴邮票的矩阵,其和一定为0
    • 通过前缀和可以求出任意一个矩阵的和,为0时贴上邮票
    • 贴上邮票即为在矩阵+1,可以用二维差分实现
    • 最后差分求和,若一个格子grid[i][j] == 0 && sum == 0则没有全覆盖
  •   class Solution {
      public:
          bool possibleToStamp(vector<vector<int>>& grid, int stampHeight, int stampWidth) {
              int m = grid.size(),n = grid[0].size();
              //求前缀和
              vector<vector<int>> s(m+1,vector<int>(n+1));
              for(int i=0;i<m;i++)
                  for(int j=0;j<n;j++)
                      s[i+1][j+1] = s[i+1][j] + s[i][j+1] - s[i][j] + grid[i][j];
              //求差分数组
              vector<vector<int>> d(m+2,vector<int>(n+2));
              for(int i2=stampHeight;i2<=m;i2++)
              {
                  for(int j2=stampWidth;j2<=n;j2++)
                  {
                      //左上角坐标
                      int i1 = i2 - stampHeight + 1;
                      int j1 = j2 - stampWidth + 1;
                      //这个矩阵全为0,可以贴邮票
                      if(s[i2][j2] - s[i2][j1-1] - s[i1-1][j2] + s[i1-1][j1-1] == 0)
                      {
                          d[i1][j1] ++;
                          d[i1][j2+1] --;
                          d[i2+1][j1] --;
                          d[i2+1][j2+1] ++;
                      }
                  }
              }
              //复原差分数组
              for(int i=0;i<m;i++)
                  for(int j=0;j<n;j++)
                  {
                      d[i+1][j+1] += d[i+1][j] + d[i][j+1] - d[i][j];
                      //应该贴但是没贴
                      if(grid[i][j] == 0 && d[i+1][j+1] == 0)
                          return false;
                  }
              return true;
          }
      };
    

http://www.kler.cn/a/280924.html

相关文章:

  • 【奇某信-注册/登录安全分析报告】
  • 云计算实训38——docker网络、跨主机容器之间的通讯
  • 招募进行中 | 在热爱中持续分享,快来报名加入!
  • 【书生大模型实战营(暑假场)】进阶任务六 MindSearch CPU-only 版部署
  • 惊恐!数据硬删除了?那怎么恢复?
  • MySQL数据库MVCC机制底层原理详解
  • 《python语言程序设计》2018版第8章第2题检测子串,你可以用str类中的find方法检测一个字符串
  • 机器学习(ML)算法分类
  • vue2踩坑记录:computed中不建议调用后台接口
  • HSE软件组件有哪些?如何实现HSE与主机的通信(同步/异步)?如何使用HSE提供的安全服务?
  • 【GIT】Idea中的git命令使用-全网最新详细(包括现象含义)
  • Qt详解QUrlQuery 处理URL查询字符串
  • 电单车TCP通讯协议对接phpworkerman
  • 【Leetcode 2103 】 环和杆 —— 二维数组的应用
  • 【Yarn】Yarn的基本执行流程(二)AM Container的启动
  • 黑神话悟空丨资源合集,光追配置+修改器+各种奇奇怪怪的MOD
  • Python知识点:如何使用Elasticsearch与Elasticsearch-py进行全文检索
  • PHP伪协议
  • Excel如何快速的定位到某一列和快速知道当前列
  • RTC相关