【前缀和】矩阵区域和(medium)

news2025/4/19 4:17:27

矩阵区域和(medium)

  • 题⽬描述:
  • 解法:
  • 代码
    • Java 算法代码:
    • C++ 算法代码:

题⽬描述:

题⽬链接: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

解法:

算法思路:
在这里插入图片描述
⼆维前缀和的简单应⽤题,关键就是我们在填写结果矩阵的时候,要找到原矩阵对应区域的「左上⻆」以及「右下⻆」的坐标(推荐⼤家画图)
左上⻆坐标: x1 = i - k,y1 = j - k ,但是由于会「超过矩阵」的范围,因此需要对 0
取⼀个 max 。因此修正后的坐标为: x1 = max(0, i - k), y1 = max(0, j - k) ;
右下⻆坐标: x1 = i + k,y1 = j + k ,但是由于会「超过矩阵」的范围,因此需要对 m

  • 1 ,以及 n - 1 取⼀个 min 。因此修正后的坐标为: x2 = min(m - 1, i + k),
    y2 = min(n - 1, j + k) 。
    然后将求出来的坐标代⼊到「⼆维前缀和矩阵」的计算公式上即可~(但是要注意下标的映射关系)
    ![![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/62e1f6f110f14ec98b6257dd19da3768.png)
    在这里插入图片描述

代码

Java 算法代码:

class Solution {
 public int[][] matrixBlockSum(int[][] mat, int k) {
 int m = mat.length, n = mat[0].length;
 // 1. 预处理前缀和矩阵
 int[][] dp = new int[m + 1][n + 1];//方便处理边界情况
 for(int i = 1; i <= m; i++)
 	for(int j = 1; j <= n; j++)
 		dp[i][j] = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] + mat[i - 1][j - 1];//注意不是+mat[i][j]
 
 // 2. 使⽤
 int[][] ret = new int[m][n];
 for(int i = 0; i < m; i++)
	 for(int j = 0; j < n; j++)
	 {
	 int x1 = Math.max(0, i - k) + 1, y1 = Math.max(0, j - k) + 1;
	 int x2 = Math.min(m - 1, i + k) + 1, y2 = Math.min(n - 1, j + k) + 1;
	 ret[i][j] = dp[x2][y2] - dp[x1 - 1][y2] - dp[x2][y1 - 1] + dp[x1 - 1][y1 - 1];
	 }
 	 return ret;
 }
}

C++ 算法代码:

class Solution {
public:
 vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {
 int m = mat.size(), n = mat[0].size();
 vector<vector<int>> dp(m + 1, vector<int>(n + 1));
 // 1. 预处理前缀和矩阵
 for(int i = 1; i <= m; i++)
 for(int j = 1; j <= n; j++)
 dp[i][j] = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] + mat[i - 1][j - 1];
 
 // 2. 使⽤
 vector<vector<int>> ret(m, vector<int>(n));
 for(int i = 0; i < m; i++)
 for(int j = 0; j < n; j++)
 {
 int x1 = max(0, i - k) + 1, y1 = max(0, j - k) + 1;
 int x2 = min(m - 1, i + k) + 1, y2 = min(n - 1, j + k) + 1;
 ret[i][j] = dp[x2][y2] - dp[x1 - 1][y2] - dp[x2][y1 - 1] + dp[x1 - 1][y1 - 1];
 }
 return ret;
 }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2332989.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一周学会Pandas2 Python数据处理与分析-Pandas2读取Excel

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Excel格式文件是办公使用和处理最多的文件格式之一&#xff0c;相比CSV文件&#xff0c;Excel是有样式的。Pandas2提…

【MySQL】002.MySQL数据库基础

文章目录 数据库基础1.1 什么是数据库1.2 基本使用创建数据库创建数据表表中插入数据查询表中的数据 1.3 主流数据库1.4 服务器&#xff0c;数据库&#xff0c;表关系1.5 MySQL架构1.6 SQL分类1.7 存储引擎1.7.1 存储引擎1.7.2 查看存储引擎1.7.3 存储引擎对比 前言&#xff1a…

02-redis-源码下载

1、进入到官网 redis官网地址https://redis.io/ 2 进入到download页面 官网页面往最底下滑动&#xff0c;找到如下页面 点击【download】跳转如下页面&#xff0c;直接访问&#xff1a;【https://redis.io/downloads/#stack】到如下页面 ​ 3 找到对应版本的源码 https…

大模型上下文协议MCP详解(1)—技术架构与核心机制

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl1. MCP概述 1.1 定义与目标 MCP(Model Context Protocol,模型上下文协议)是由Anthropic公司于2024年11月推出的开放标准协议。它旨在解决AI大模型与外部工具、数据源及API之间的标准化交互问题…

Windows下安装depot_tools

一、引言 Chromium和Chromium OS使用名为depot_tools的脚本包来管理检出和审查代码。depot_tools工具集包括gclient、gcl、git-cl、repo等。它也是WebRTC开发者所需的工具集&#xff0c;用于构建和管理WebRTC项目。本文介绍Windows系统下安装depot_tools的方法。 二、下载depo…

解决 vite.config.ts 引入scss 预处理报错

版本号&#xff1a; "sass": "^1.86.3","sass-loader": "^16.0.5","vite": "^6.2.0" 报错1&#xff1a;[plugin:vite:css] [SASS] Error&#xff1a;Cant find stylesheet to import vite.config.ts 开始文件错…

MySQL学习笔记7【InnoDB】

Innodb 1. 架构 1.1 内存部分 buffer pool 缓冲池是主存中的第一个区域&#xff0c;里面可以缓存磁盘上经常操作的真实数据&#xff0c;在执行增删查改操作时&#xff0c;先操作缓冲池中的数据&#xff0c;然后以一定频率刷新到磁盘&#xff0c;这样操作明显提升了速度。 …

分布式锁和事务注解结合使用

在分布式系统中&#xff0c;事务注解&#xff08;如 Transactional&#xff09;与分布式锁的结合使用是保障数据一致性和高并发安全的核心手段。以下是两者的协同使用场景及技术实现要点&#xff1a; 一、事务注解的局限性及分布式锁的互补性 维度事务注解&#xff08;Transac…

全国产压力传感器常见的故障有哪些?

全国产压力传感器常见的故障如哪些呢&#xff1f;来和武汉利又德的小编一起了解一下&#xff0c;主要包括以下几类&#xff1a; 零点漂移 表现&#xff1a;在没有施加压力或处于初始状态时&#xff0c;传感器的输出值偏离了设定的零点。例如&#xff0c;压力为零时&#xff0c…

使用nhdeep档案目录打印工具生成干部人事档案目录打印文件

打开nhdeep档案目录打印工具&#xff0c;在左侧的模版列表中选中"干部人事档案目录"模版。 然后点击右下角“批量导入行”按钮&#xff0c;选择事先准备好的人事目录数据excel文件完成导入。 人事目录数据excel文件的结构和内容如下&#xff1a; 导入完成后&#xf…

工作记录 2015-08-24

工作记录 2015-08-24 序号 工作 相关人员 1 更新76.19的D:\FNEHRRD&#xff0c;更新的差不多了&#xff0c;还在测试中。具体情况见附件。 郝 识别引擎监控 Ps (iCDA LOG :剔除了204篇ASG_BLANK之后的结果): LOG_File 20150823.txt BLANK_CDA/ALL 102/947 (10.8%) TIME…

在 Dev-C++中编译运行GUI 程序介绍(三)有趣示例一组

在 Dev-C中编译运行GUI程序介绍&#xff08;三&#xff09;有趣示例一组 前期见 在 Dev-C中编译运行GUI 程序介绍&#xff08;一&#xff09;基础 https://blog.csdn.net/cnds123/article/details/147019078 在 Dev-C中编译运行GUI 程序介绍&#xff08;二&#xff09;示例&a…

Compose 适配 - 响应式排版 自适应布局

一、概念 基于可用空间而非设备类型来设计自适应布局&#xff0c;实现设备无关性和动态适配性&#xff0c;避免硬编码&#xff0c;以不同形态布局更好的展示内容。 二、区分可用空间 WindowSizeClasses 传统根据屏幕大小和方向做适配的方式已不再适用&#xff0c;APP的显示方式…

光储充智能协调控制系统的设计与应用研究

摘要 随着化石能源枯竭与环境污染问题加剧&#xff0c;构建高效、稳定的新能源系统成为能源转型的关键。本文针对光伏发电间歇性、储能系统充放电效率及充电桩动态负荷分配等技术挑战&#xff0c;提出一种基于智能协调管理的光储充一体化解决方案。通过多源数据融合与优化控制算…

UE4 踩坑记录

1、Using git status to determine working set for adaptive non-unity build 我删除了一个没用的资源&#xff0c;结果就报这个错&#xff0c;原因就是这条命令导致的&#xff0c; 如果这个项目是git项目&#xff0c; ue编译时会优先通过 git status检查哪些文件被修改&#…

C语言超详细指针知识(一)

通过前面一段学习C语言的学习&#xff0c;我们了解了数组&#xff0c;函数&#xff0c;操作符等相关知识&#xff0c;今天我们将要进行指针学习&#xff0c;这是C语言中较难的一个部分&#xff0c;我将带你由浅入深慢慢学习。 1.内存与地址 在正式学习指针前&#xff0c;我们首…

《算法笔记》3.3小节——入门模拟->图形输出

1036 跟奥巴马一起编程 #include <iostream> #include <cmath> using namespace std;int main() {int n,m;char c;cin>>n>>c;for (int i 0; i < n; i) {cout<<c;}cout<<endl;m round(1.0*n/2)-2;//round里面不能直接写n/2&#xff0c;…

【深入浅出 Git】:从入门到精通

这篇文章介绍下版本控制器。 【深入浅出 Git】&#xff1a;从入门到精通 Git是什么Git的安装Git的基本操作建立本地仓库配置本地仓库认识工作区、暂存区、版本库的概念添加文件添加文件到暂存区提交文件到版本库提交文件演示 理解.git目录中的文件HEAD指针与暂存区objects对象 …

在gitee上创建仓库——拉取到本地---添加文件---提交

2025/04/11/yrx0203 1-创建仓库 2-填写信息 3-创建完成后把仓库地址复制下来 4-在电脑上创建1个空的文件夹&#xff0c;进入这个文件夹&#xff0c;鼠标右击打开git bash 5-粘贴刚才复制的仓库的地址&#xff0c;回车 这样仓库就被拉取完成了 6-把本地的这个文件夹初始化…

小刚说C语言刷题——第21讲 一维数组

在日常生活中&#xff0c;我们经常输入一组数据。例如输入一个班30名学生的语文成绩&#xff0c;或者输入一组商品的价格。这个时候&#xff0c;我们如何输入一组类型相同的数据呢&#xff1f;这里我们就要用到数组。 1.数组的概念 所谓数组就是一组相同类型数据的集合。数组中…