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

news/2025/2/26 12:50:14

目录

    • 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.niftyadmin.cn/n/5868718.html

相关文章

免费使用 DeepSeek API 教程及资源汇总

免费使用 DeepSeek API 教程及资源汇总 一、DeepSeek API 资源汇总1.1 火山引擎1.2 百度千帆1.3 阿里百炼1.4 腾讯云 二、其他平台2.1 华为云2.2 硅基流动 三、总结 DeepSeek-R1 作为 2025 年初发布的推理大模型,凭借其卓越的逻辑推理能力和成本优势,迅速…

硬件基础(3):三极管(1):理论基础

目录 一、背景 二、定义 三、分类 四、工作原理 NPN三极管工作原理 基本工作原理 电流放大倍数(增益) 输入特性 1. 输入特性的基本概念 2. 输入特性曲线的形态 3. 输入特性曲线的具体分析 输出特性 1. 输出特性图的基本概念 2. 输出特性曲…

[ComfyUI]官方已支持Skyreels混元图生视频,速度更快,效果更好(附工作流)

一、介绍 昨天有提到官方已经支持了Skyreels,皆大欢喜,效果更好一些,还有GGUF量化版本,进一步降低了大家的显存消耗。 今天就来分享一下官方流怎么搭建,我体验下来感觉更稳了一些,生成速度也更快&#xf…

springboot实现多文件上传

springboot实现多文件上传 代码 package com.sh.system.controller;import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.PostMap…

Ubuntu22.04系统安装Anaconda、CUDA和CUDNN

之前一直在Windows系统下使用Anaconda和CUDA加速,最近需要复现一个算法,文档里面有Linux系统conda构建环境的教程。 本篇博文参考博文,记录自己安装的过程,便于以后需要。 目录 1.Anaconda1.1 安装包下载1.2 安装软件1.3 更新cond…

Mac编译ffmpeg源码并集成到iOS App

编译出iOS静态库 1、下载ffmpeg源码 https://www.ffmpeg.org/download.html#build-mac 下载成功后:看到文件列表如下: 2、在根目录,创建build-ios.sh,内容如下 #!/bin/bash# 设置目标架构 ARCHS=

「爬虫实战分享:如何高效爬取某汽车官方销售排行榜」

本文目录 💖前言一、💫代理IP的作用二、💫爬虫中的挑战1.代理IP的质量和稳定性2.IP封禁问题3. 反爬虫技术的升级 三、💫亮数据动态代理:数据采集的可靠伙伴1、真实体验 四、💫爬虫实战:使用亮数…

dubbo转http方式调用

业务背景:在当前项目下,所有前端请求均通过外层网关转发到后端这边的dubbo服务,现计划去掉网关层,由前端直接http调用后端dubbo。 解决方案:在前端调用方式不变的前提下,后端服务新建controller层&#xf…