Leetcode每日一题】 二维前缀和 - 矩阵区域和(难度⭐⭐)(31)

1. 题目解析

题目链接:1314. 矩阵区域和

题目乍一看很晦涩难懂,又是大于等于又是k的

仔细分析,题目所说的意思就是以[i,j]为中心,求上下左右向外拓展k个单位的矩阵和,放在名为answer的矩阵中,最后返回answer矩阵即可

2.算法原理

在填写结果矩阵的过程中,一个核心步骤是确定原矩阵中对应区域的“左上角”和“右下角”的坐标。为了更好地理解,建议大家通过画图来辅助。

  • 首先,我们考虑左上角的坐标。理论上,它的x坐标是i减去k,y坐标是j减去k。但是,由于坐标可能超出原矩阵的范围,我们必须确保坐标不会小于0。因此,我们需要对0取最大值。经过修正,左上角的坐标为:x1 = max(0, i - k),y1 = max(0, j - k)。
  • 接下来,我们确定右下角的坐标。理论上,它的x坐标是i加上k,y坐标是j加上k。但同样地,我们也要考虑坐标不能超出原矩阵的边界,即不能大于m-1和n-1。因此,我们需要对m-1和n-1取最小值。修正后的右下角坐标为:x2 = min(m - 1, i + k),y2 = min(n - 1, j + k)。
  • 一旦我们得到了这两个关键坐标,就可以将它们代入到二维前缀和矩阵的计算公式中。不过,需要注意的是,在代入坐标时,我们可能需要考虑到下标的映射关系,确保计算的准确性。

通过这样的步骤,我们可以有效地确定原矩阵中对应区域的边界,进而进行后续的计算和填写结果矩阵的操作。

3.代码编写

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));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];//减一为了匹配原来的matvector<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;//加一为了匹配dp表ret[i][j] = dp[x2][y2] - dp[x1 - 1][y2] - dp[x2][y1 - 1] + dp[x1 - 1][y1 - 1];}return ret;}
};

写在最后

嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。

觉得有点收获的话,不妨给我点个吧!

如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~ 

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

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

相关文章

Session登陆实践

Session登陆实践 Session登录是一种常见的Web应用程序身份验证和状态管理机制。当用户成功登录到应用程序时&#xff0c;服务器会为其创建一个会话&#xff08;session&#xff09;&#xff0c;并在会话中存储有关用户的信息。这样&#xff0c;用户在与应用程序交互的整个会话…

设计模式 代理模式

代理模式主要使用了 Java 的多态&#xff0c;主要是接口 干活的是被代理类&#xff0c;代理类主要是接活&#xff0c; 你让我干活&#xff0c;好&#xff0c;我交给幕后的类去干&#xff0c;你满意就成&#xff0c;那怎么知道被代理类能不能干呢&#xff1f; 同根就成&#xff…

档案室管理人员有哪些岗位

档案室管理人员的岗位可以分为以下几类&#xff1a; 1. 档案文书管理岗位&#xff1a;负责档案文书的管理、整理、归档和借阅工作&#xff0c;包括档案资料的分类、编目、装订、存储等。 2. 档案数字化管理岗位&#xff1a;负责将纸质档案数字化&#xff0c;进行扫描、转换、存…

mac下终端命令提示补全

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 mac下终端命令提示补全 前言Zsh-autosuggestions原理解析&#xff1a;智能提示的工作方式1. 命令历史分析&#xff1a;2. 智能提示生成&#xff1a;3. 用户交互和选择&#xff1a;4. 配置和个性化&…

Linux基础IO【 详 解 】

文章目录 C语言文件IOC语言文件接口汇总默认打开的三个流 系统文件IOopenclosewriteread 文件描述符fd文件描述符的分配规则重定向重定向的本质dup2 FILEFILE当中的文件描述符FILE当中的缓冲区 理解文件系统初识inode磁盘分区与格式化介绍 软硬链接软链接硬链接软硬链接的区别 …

CorelDRAW Graphics Suite2024专业图形设计软件Windows/Mac最新25.0.0.230版

CorelDRAW Graphics Suite 2024是一款专业的图形设计软件&#xff0c;它集成了CorelDRAW Standard 2024和其他高级图形处理工具&#xff0c;为用户提供了全面的图形设计和编辑解决方案。 该软件拥有强大的矢量编辑功能&#xff0c;用户可以轻松创建和编辑矢量图形&#xff0c;…

UI 易用性测试 以及自动化实现!

GUI 是指图形用户界面&#xff0c;UI 是指用户界面&#xff0c;对于纯软件系统&#xff0c;这两者没有本质的区别&#xff0c;GUI易用性测试与 UI 易用性测试内容一致。但是如果测试的对象是一个产品&#xff0c;这两者则存在区别&#xff0c;对于产品 UI 则不仅仅包括 GUI&…

多线程-线程池原子性并发工具类

1.线程池 1.线程状态 虚拟机中线程的六种状态 新建状态&#xff08;NEW&#xff09; --创建线程 就绪状态&#xff08;RUNNABLE&#xff09; --start方法 阻塞状态&#xff08;BLOCKED&#xff09; --无法获得锁对象 等待状态&#xff08;WAITING&#xff09; …

springboot254小区团购管理

小区团购管理设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装小区团购管理软件来发挥其高效地信…

菜鸟笔记-14Python绘图颜色使用

Python中绘图主要依赖于各种库&#xff0c;其中matplotlib是最常用且功能强大的一个。在matplotlib中&#xff0c;你可以使用各种颜色来表示不同的数据点、线条或填充区域。下面我将详细介绍如何在Python中使用matplotlib来设置绘图颜色&#xff0c;并给出具体的例子。 14.1颜…

Spring循环依赖问题分析

对象分类&#xff1a;1.成品对象&#xff1a;实例化完成 初始化完成 2.半成品对象&#xff1a; 实例化完成 初始化未完成 实例化和初始化可以分开执行是解决循环依赖问题的关键 一级缓存&#xff1a;保存完成的bean对象 二级缓存&#xff1a;存储成品对象 三级缓存&#xff1a…

《北上广深杭》都有哪些最值得加入的互联网大厂

IT行业做技术很公平&#xff0c;没那么看重出身&#xff0c;只要你技术好&#xff0c;能力强&#xff0c;就能进大厂&#xff0c;拿高薪。IT行业算是目前为数不多的比较容易屌丝逆袭的行业之一&#xff0c;IT行业也从来不缺少造富神话。一起加油吧&#xff0c;打工人&#xff0…

Python 创建PPT

本篇为如何使用Python来创建ppt文件。 创建PPT 安装必要的库 命令如下&#xff1a; pip install python-pptx 安装过程&#xff1a; 创建ppt文件 在当前目录下创建一个test的ppt文件。其中包含两页&#xff0c;分别使用了不同的布局。 第一页设置了标题和内容。第二页只设…

【Linux】cpp-httplib库

目录 升级gcc版本 下载cpp-httplib的zip安装包&#xff0c;上传到服务器 ​编辑 简单使用 首先打开gittee,搜索cpp-httplib,选择其中一个即可 也可以点下方链接 cpp-httplib库&#xff1a;cpp-httplib: cpp-httplib (gitee.com) 注意&#xff1a;cpp-httplib在使用的时候需…

AJAX-HTTP协议

文章目录 HTTP协议请求报文响应报文接口文档 HTTP协议 规定了浏览器发送及服务器返回内容的格式 请求报文 浏览器按照HTTP协议要求的格式&#xff0c;发送给服务器的内容 组成部分&#xff1a; 1.请求行&#xff1a;请求方法&#xff0c;URL&#xff0c;协议 2.请求头&#…

算法的时间复杂度和空间复杂度(数据结构)

本博客讲解算法的时间复杂度和空间复杂度的来源及定义&#xff0c;时间复杂度的表示及练习。空间复杂度的计算会在后续博客讲解 算法的复杂度 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏&#xff0c;一般是从时…

Glip模型

Yolos 完全使用Transformer做目标检测 Detr 先使用CNN提取特征然后再使用transformerDetr和Yolos共同的缺点&#xff1a;需要事先知道所有的类别 Glip Zero-shot, 目标检测的类别可以不在训练类别中 目标框进行视觉编码&#xff0c;然后和文本进行匹配文本和视觉特征是通…

docker ENTRYPOINT [“sh“,“-c“,“java“,“-jar“,“Hello.jar“] 启动失败问题分析

因为没系统的学过linux语法&#xff0c;所以才会产生如下疑问。大佬请跳过。 问题&#xff1a;当在dockerfile里面配置 ENTRYPOINT ["sh","-c","java","-jar","Hello.jar"] &#xff0c;启动对应容器时会无法正常运行&…

基于SpringBoot宠物领养系统的设计与实现(代码+数据库+文档)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

基于机器视觉的动态物体追踪研究与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 Python 3 1.2图像二值化 3 1.3 Opencv 3 1.4图像去噪 3 1.5本章小结 4 2 动态目标检测算法 5 2.1 背景差分法 5 2.2 帧差法 7 2.3 光流法 9 2.4 本章小结 10 3 动态目标跟踪算法 11 3.1 Mean Shift 11 3.2 Cam Shift 13 3…