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

【前缀和】矩阵区域和

文章目录

  • 1314. 矩阵区域和
    • 解题思路

在这里插入图片描述

1314. 矩阵区域和

1314. 矩阵区域和

​ 给你一个 m x n 的矩阵 mat 和一个整数 k ,请你返回一个矩阵 answer ,其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和:

  • i - k <= r <= i + k,
  • j - k <= c <= j + k
  • (r, c) 在矩阵内。

示例 1:

输入:mat = [[1,2,3],[4,5,6],[7,8,9]], k = 1
输出:[[12,21,16],[27,45,33],[24,39,28]]

示例 2:

输入:mat = [[1,2,3],[4,5,6],[7,8,9]], k = 2
输出:[[45,45,45],[45,45,45],[45,45,45]]

提示:

  • m == mat.length
  • n == mat[i].length
  • 1 <= m, n, k <= 100
  • 1 <= mat[i][j] <= 100

解题思路

​ 首先我们要明白题目要我们干什么,其实就是求出矩阵中每个元素,它向外拓展 k 个单位之后形成的区域的总和,如下图中以元素 4 为例,如果 k = 1 的话的情况:

在这里插入图片描述

​ 那其实这道题我们就可以用之前学过的二维前缀和来解决,大体思路都是一样的,虽然我们给过模板,但是切记不要死记硬背,要理解模板是怎么来的!

​ 下面的推导,统一使用以上图中元素 4 为中心,k=1 的例子来推导!

​ 还是一样,首先我们需要一个二维的 dp 表来记录前缀和,而 dp[i][j] 就表示从 [0, 0][i, j] 的元素总和

​ 根据状态表示和区域的累加,可以得到 dp[i][j] = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] + mat[i][j],这个和模板题是类似的,这里就不细讲了!

​ 接着我们再创建一个二维数组 ret,用于记录每个位置的区域和作为函数返回值的,此时和二维前缀和模板题不同的是,我们这次要求的区间需要我们自己去求出来,其实也不难,只要求出了要求的区域的左上角和右下角两个坐标,就能得到这个区间的信息了,如下图所示:

在这里插入图片描述

​ 也就是说,我们要求出图中的 x1y1x2y2,但问题是,有可能这个区间的一部分是越界的,但是我们只要有效区间,所以我们需要做处理而不能单纯的让 x1 = 中心坐标 - k 这样子去计算,会出错的!

​ 那么该如何灵活的计算这个可能越界的坐标情况呢❓❓❓

​ 其实非常简单,首先假设中心元素 4 的坐标是 [i, j],然后做法如下所示:

​ 以左上角为例,如果 i

http://www.xdnf.cn/news/305209.html

相关文章:

  • 软考-高级系统架构设计师
  • 【redis】redis 手动切换主从
  • 计算机网络复习资料
  • PyCharm 加载不了 conda 虚拟环境,不存在的
  • 【BUG】‘DetDataSample‘ object has no attribute ‘_gt_sem_seg‘
  • Nacos源码—4.Nacos集群高可用分析三
  • MPay码支付系统第四方聚合收款码多款支付插件个人免签支付源码TP8框架全开源
  • Linux服务之nginx中http设置及虚拟主机搭建
  • C++学习之路,从0到精通的征途:priority_queue类的模拟实现
  • Kafka与RocketMQ在事务消息实现上的区别是什么?
  • 扩增子分析|微生物生态网络稳定性评估之鲁棒性(Robustness)和易损性(Vulnerability)在R中实现
  • 鸿蒙系统被抹黑的深层解析:技术、商业与地缘政治的复杂博弈-优雅草卓伊凡
  • 用于备份的git版本管理指令
  • Github Action部署node项目
  • 如何打造系统级低延迟RTSP/RTMP播放引擎?
  • Leetcode Hot 100字母异位词分词
  • spring详解-循环依赖的解决
  • 第九章,链路聚合和VRRP
  • AI+浏览器自动化:Nanobrowser Chrome 扩展的使用「详细教程」
  • 【LLM】Open WebUI 使用指南:详细图文教程
  • Stream和Collections工具类
  • 多行文本省略
  • oceanbase不兼容SqlSugarCore的问题
  • 【KWDB创作者计划】_通过一篇文章了解什么是 KWDB(KaiwuDB)
  • JMeter_配置元件之随机变量(RandomVariable)介绍
  • 手撕算法(1)
  • 使用 Spring Boot 构建 REST API
  • SpringBoot教学管理平台源码设计开发
  • leetcode 24. 两两交换链表中的节点
  • 分库分表后复杂查询的应对之道:基于DTS实时性ES宽表构建技术实践