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

[算法--前缀和] 二维前缀和

目录

    • 1. 前缀和数组的递推公式: dp[i][j] = dp[i-1][j] + dp[i][j-1] + nums[i][j] - dp[i-1][j-1].
    • 2. 前缀和数组需要额外开一行一列.
    • 3. 想要快速求任意一个矩形和, 实际上是多个前缀和的拼凑.

今天来贴一道模板题 -> 二位前缀和

然后我们来简单总结两个公式:

因为这是一个 [模板题] 嘛, 所以我们重点说两个问题

  • 前缀和数组如何求解?
  • 如何利用前缀和数组?

1. 前缀和数组的递推公式: dp[i][j] = dp[i-1][j] + dp[i][j-1] + nums[i][j] - dp[i-1][j-1].

原理很简单, 我们可以看下面图:
在这里插入图片描述

我们以虚线和实线对图形进行分割, 实际上我们可以区分出A, B, C, D四大块来. 我们的dp[i, j]想要代表的是A + B + C + D区域的大小.
在这里插入图片描述
所以我们可得公式: dp[i][j] = dp[i-1][j] + dp[i][j-1] + nums[i][j] - dp[i-1][j-1].

2. 前缀和数组需要额外开一行一列.

显然, 我们根据上面公式, 当i = 0 或 j = 0的时候, 肯定会越界, 所以我们需要额外开一行一列来避免这种情况(当然进行特殊判断也可以).

在这里插入图片描述

3. 想要快速求任意一个矩形和, 实际上是多个前缀和的拼凑.

比如, 我想要求下面这个图的矩形和:
在这里插入图片描述
所以我们可以得到利用二维前缀和的公式是: ret = dp[i][j] - dp[i-1][j] - dp[i][j-1] + dp[i-1][j-1].

参考代码是:

int main(

相关文章:

  • ReentrantLock 用法与源码剖析笔记
  • 数据库的基本操作
  • 前端项目部署阻止用户打开控制台
  • BGP状态和机制
  • 鱼皮智能云图库项目学习
  • Unity基础学习(二)
  • docker 占用系统空间太大了,整体迁移到挂载的其他磁盘|【当前普通用户使用docker时,无法指定镜像、容器安装位置【无法指定】】
  • 从 Spring Boot 2 升级到 Spring Boot 3 的终极指南
  • 02、Hadoop3.x从入门到放弃,第二章:集群环境搭建
  • 从零开始用react + tailwindcs + express + mongodb实现一个聊天程序(三) 实现注册 登录接口
  • Gin框架深度解剖:路由树的实现原理
  • 蓝桥杯单片机基础部分——1.5基础模块代码升级
  • 【软件设计】SOLID原则详解与PHP实战示例
  • PageForge v2025.1.6 发布:支持 KaTeX 数学公式渲染
  • Spring AI + 大模型开发应用
  • 爬楼梯问题
  • 【Alertmanager】Alertmanager告警路由,告警静默,告警抑制,高可用的实现
  • CryptoJS库中WordArray对象支持哪些输出格式?除了toString() 方法还有什么方法可以输出吗?WordArray对象的作用是什么?
  • Python入门教程丨3.8 网络编程
  • 计算机毕业设计 ——jspssm504springboot 职称评审管理系统
  • 福建石狮有做网站的没/搜狗网址导航
  • 用自己电脑做服务器 网站/服务器
  • 站点怎么建网页/荆门今日头条新闻发布
  • 深圳 三人 网站建设/seo和sem是什么意思
  • 批量做网站软件/电商网站前端页面内容编写
  • seo网站营销推广全.../seo推广软件下载