前缀和(八)矩阵区域和

 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

class Solution {
public:
    vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {
        // 1、初始化前缀和dp数组
        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前缀和数组定义为从[1,1]->[i,j]位置的和
                dp[i][j] = dp[i][j-1] + dp[i-1][j] - dp[i-1][j-1] + mat[i-1][j-1];
        // for(int i = 1; i <= m; i++)
        //     for(int j = 1; j <= n; j++)
        //         cout<<dp[i][j]<<" ";

        // 2、使用前缀和进行更新answer
        vector<vector<int>> ans(m, vector<int> (n));
        int x1,y1,x2,y2;
        for(int i = 1; i <= m; i++)
        {
            for(int j  = 1; j <= n; j++)
            {
                x1 = i-k < 1 ? 1 : i-k;
                y1 = j-k < 1 ? 1 : j-k;
                x2 = i+k > m ? m : i+k;
                y2 = j+k > n ? n : j+k;
                ans[i-1][j-1] = dp[x2][y2] - dp[x2][y1-1] - dp[x1-1][y2] + dp[x1-1][y1-1];
                // cout<<ans[i-1][j-1];
            }
        }
        return ans;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx日常运维方法Linux版

关注 工 仲 好&#xff1a;IT运维大本营1&#xff0c;安装&#xff1f; 下载RPM&#xff1a;wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.10.0-1.el7.ngx.x86_64.rpm 离线包用其它方式下载也可以。 安装&#xff1a;rpm -ivh nginx-1.10.0-1.el7.ngx.x86_…

基于eFramework车控车设中间件介绍

车设的发展&#xff0c;起源于汽车工业萌芽之初&#xff0c;经历了机械式操作的原始粗犷&#xff0c;到电子式调控技术的巨大飞跃&#xff0c;到如今智能化座舱普及&#xff0c;远程车控已然成为汽车标配&#xff0c;车设功能选项也呈现出爆发式增长&#xff0c;渐趋多元繁杂。…

【Copilot 】TAB keybinding not working on JetBrains Client

pycharm ssh 远程到ubuntu24.04 发现tab就是tab,无法输出copilot给出的自动补全到便捷器里。禁用host的copilot插件,重新启动ide就好了。解决办法 参考大神的办法删除主机和客户端插件中的 Copilot插件。 仅在客户端中重新安装 Copilot 插件。 我只是禁用也可以 对比了键盘映…

使用API管理Dynadot域名,设置默认域名服务器ip信息

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

【Linux】文件描述符fd

1.前置预备 文件 内容 属性访问文件之前&#xff0c;都必须先打开他 #include<stdio.h> int main() { FILE* fpfopen("log.txt","w"); if(fpNULL) { perror("fopen"); return 1; } fclose(fp); return 0…

微服务即时通讯系统(5)用户管理子服务,网关子服务

用户管理子服务&#xff08;user文件&#xff09; 用户管理子服务也是这个项目中的一个业务最多的子服务&#xff0c;接口多&#xff0c;但是主要涉及的数据表只有user表&#xff0c;Redis的键值对和ES的一个搜索引擎&#xff0c;主要功能是对用户的个人信息进行修改管理&#…

结构型-代理模式(Proxy Pattern)

什么是代理模式 由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时&#xff0c;访问对象不适合或者不能直接引用目标对象&#xff0c;代理对象作为访问对象和目标对象之间的中介。 Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理…

如何实现多级缓存以及缓存之间数据的一致性

文章目录 神领物流 -- 如何实现多级缓存以及缓存之间数据的一致性一. 为什么要使用多级缓存?二. 为什么要选择MongoDB作为数据库三. 如何缓存之间的一致性1. 如何同步更新Redis缓存2. 如何同步更新CaffeineCache缓存 神领物流 – 如何实现多级缓存以及缓存之间数据的一致性 采…

哈希处理海量数据

接下来我们将以问题的形式来介绍如何用hash处理海量数据。 1.问题1 &#xff08;位图&#xff09; 给定100亿个整数&#xff0c;设计算法找到只出现一次的。 1.1问题分析 100亿个整数&#xff0c;一个整数占用4byte&#xff0c;那么就需要约40G左右的空间来存储。显然常见的…

锐捷Web认证

文章目录 Web认证二代 Web 认证配置 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Datacom专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月6日11点40分 Web认证 Portal 认证、Web认证 Web认证的介绍 Web 认证使用浏览器进行身份验…

深入剖析 Profinet 转 EtherCAT 网关模块的配置流程

有一个工厂需要将西门子S7-1200 PLC与伺服驱动进行通讯&#xff0c;因PLC支持PROFINET而伺服驱动需EtherCAT协议&#xff0c;无法直接通讯。采用捷米特&#xff08;JM-ECTM-PN&#xff09;智能的Profinet转EtherCAT网关模块解决此问题&#xff0c;需导入GSD文件、设定IP和设备名…

【C++习题】17.栈的弹出压入序列

题目&#xff1a; 链接&#x1f517;&#xff1a;栈的弹出压入序列 题目&#xff1a; 代码&#xff1a; class Solution { public:bool IsPopOrder(vector<int> pushV,vector<int> popV) {//入栈和出栈的元素个数必须相同if(pushV.size() ! popV.size())return …

【计算机网络】VLAN及IPVLAN技术解析

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了学习VLAN相关知识的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于 使用VMware组建VLAN网络实验环境 进行的&#xff0c;每个…

【Java】—— 继承

1.继承 1.1 为什么需要继承 在使用类的时候&#xff0c;是将生活中的实物&#xff0c;抽象到代码中进行表示&#xff0c;在生活中&#xff0c;很多实物都是存在关联的&#xff0c;例如 哈士奇、中华田园犬、萨摩耶 都是狗&#xff0c;他们有共性信息&#xff0c;也有属于自己…

2024-12-06 Unity Addressables3——资源加载

文章目录 1 引用加载1.1 Addressables 的资源引用类1.2 加载资源1.3 加载场景1.4 释放资源 2 Label 介绍3 动态加载3.1 加载单个资源3.2 加载多个资源 Unity 版本&#xff1a;6000.0.26f1c1Addressables 版本&#xff1a;2.3.1 1 引用加载 1.1 Addressables 的资源引用类 Ass…

【WRF理论第十三期】详细介绍 Registry 的作用、结构和内容

目录 1. Introduction&#xff1a;介绍 Registry 的作用和功能。2. Registry Contents&#xff1a;详细描述 Registry 的结构和内容&#xff0c;包括各个部分的条目类型。2.1. DIMSPEC ENTRIES&#xff08;维度规格条目&#xff09;2.2. STATE ENTRIES&#xff08;状态变量条目…

在阿里云/Linux环境搭建Gitblit服务

在阿里云/Linux环境搭建Gitblit服务 1. 整体描述2. 前期准备3. 安装步骤3.1 下载gitblit3.2 上传gitblit3.3 解压文件3.4 修改文件配置3.5 启动gitblit3.6 安全组配置 4. 总结 1. 整体描述 前段时间买了一个阿里云服务器&#xff0c;2核2G&#xff0c;3M固定带宽的配置&#x…

鸿蒙arkts怎么打印一个方法的调用堆栈

做鸿蒙开发的时候&#xff0c;也想看一下一个方法到底是哪里调用的&#xff0c;工程太大&#xff0c;断点太麻烦&#xff0c;可以加堆栈日志。 在你的方法中加上这两句&#xff0c;就可以跟到堆栈日志 let err new Error() console.log(>>>>>>err.stack) …

116. UE5 GAS RPG 实现击杀掉落战利品功能

这一篇&#xff0c;我们实现敌人被击败后&#xff0c;掉落战利品的功能。首先&#xff0c;我们将创建一个新的结构体&#xff0c;用于定义掉落体的内容&#xff0c;方便我们设置掉落物。然后&#xff0c;我们实现敌人死亡时的掉落函数&#xff0c;并在蓝图里实现对应的逻辑&…

亚马逊云服务器Amazon EC2

一、什么是Amazon EC2&#xff1f; Amazon Elastic Compute Cloud (Amazon EC2) 在 Amazon Web Services (AWS) 云中提供按需、可扩展的计算容量。使用 Amazon EC2 可降低硬件成本&#xff0c;让您能够更快地开发和部署应用程序。您可以使用 Amazon EC2 启动任意数量的虚拟服务…