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

[算法--前缀和] 矩阵区域和

目录

    • 1. 二维前缀和的知识铺垫
    • 2. 以nums[i][j]为中心计算区域大小.
    • 3. dp数组与ret数组之间的逻辑关系.
    • 4. 细节: 如果[i,j]为中心的数组越界了呢?

下面继续分享一道用前缀和思想解决的算法问题 -> 矩阵区域和

1. 二维前缀和的知识铺垫

实际上, 有一道十分类似的基础题 -> 二维前缀和
因为比较简单, 下面就简单的说两个关键点:

  • 计算二位前缀和数组的公式推导: dp[i][j] = dp[i-1][j] + dp[i][j-1] + nums[i][j] - dp[i-1][j-1]
    在这里插入图片描述
      这个很简单, 实际上推导的是二维前缀和数组如何递推的, 在已知左边前缀和和上面前缀和前提下, 可以用橙色部分 + 蓝色部分 + 红色部分 - 橙色蓝色交叉的部分(这样也就决定了必须是从左向右推导, 从上到下推导的一个顺序).
  • 利用二位前缀和数组求指定区域和: ret = dp[x2, y2] - dp[x1-1, y2] - dp[x2, y1-1] + dp[x1-1][y1-1]
    在这里插入图片描述

  上面这个图说明了如何利用我们前面求好的二位前缀和数组来求任何一个特定矩形大小的所有元素之和. 具体就不说了, 黄色区域的元素之和 = 所有颜色之和(dp[x2, y2]) - 绿色区域 - 蓝色区域 + 绿色和蓝色区域重叠部分.

这其实就是[二位前缀和模板题]的解答关键. 当然, 仅仅这些是远远不够的, 这仅仅是这道题的铺垫.

2. 以nums[i][j]为中心计算区域大小.

我们这道题 -> 矩阵区域和实际上就是对上面做了一个简单的变形. 我们以示例1为例, 来简单说一下这个题目要求我们做啥?
在这里插入图片描述
在这里插入图片描述

  这样的话一种方法肯定就是暴力求解了, 以[i,j]为中心, 挨个遍历周围的元素然后相加给到ret数组中的元素, 显然效率很低.

为了提高效率, 我们借用二维前缀和来提高效率.

3. dp数组与ret数组之间的逻辑关系.

我们预处理出一个二位前缀和数组来.
然后如何将ret数组与dp数组建立关系呢? 请看下图:
在这里插入图片描述
但是, 还需要注意一个细节 -> 就是越界问题.

4. 细节: 如果[i,j]为中心的数组越界了呢?

上面标题说的啥意思呢? 就是类似于下面这种情况:
在这里插入图片描述
  因此, 我们在计算的时候要进行判断, 如果要访问的值越过了mat数组, 我们需要即使进行纠正!

  好了, 说完了上面还有一个小难点就是因为有三个数组, 一个mat数组, 一个dp数组, 还一个ret数组, 在编码方面两个小难点:


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

相关文章:

  • 计算机基础:二进制基础01,比特与字节
  • 说说 Spring MVC 的执行流程
  • 全国各省山峰分布SHP数据详解及其在科学研究与旅游规划中的应用
  • 排序算法适合的场景
  • ffmpeg av_find_input_format的作用
  • Linux通过设备名称如何定位故障硬盘
  • 洛谷 B2006:地球人口承载力估计 ← float 类型
  • WebView中操作视频播放,暂停
  • Redis 中有序集合(Sorted Set)的使用方法
  • 用PySpark和PyTorch实现跨境支付Hive数据仓库的反洗钱数据分析
  • 物联网+大数据,智慧公租房管理系统构建未来社区
  • 嵌入式硬件篇---阶跃函数冲激函数
  • 分布式主键生成服务
  • 【清华大学】DeepSeek从入门到精通系列教程 第五版:DeepSeek与AI幻觉 pdf文档下载
  • 聊聊制造企业数字化质量管理的业务架构与流程
  • Qt | Excel创建、打开、读写、另存和关闭
  • 大模型应用: 多模态交互
  • 给虚拟机配置IP
  • 力扣-动态规划-494 目标和
  • html中的css