矩阵区域和 ---- 二维前缀和

题目链接

题目:

分析:

  • 题目的题意是:
  • 矩阵和的问题, 应该使用二维前缀和来解决 
  • 先预处理一个前缀和, 但是题目中下标是从0开始的, 为了不处理边界情况, 我么预处理出来的矩阵, 要从下标为1的位置开始, 所以前缀和矩阵的大小为m+1 * n+1
  • 预处理前缀和:
    dp[i][j] 表示: 从[1,1] 位置到[i,j] 位置, 这段区间里面所有元素的和

    dp[i][j] 就等于A+B+C+D, A好求, 就是dp[i-1][j-1], 但BC不好求, 所以我们AB一起求,AC一起求
    但是前缀和数组和原数组下标不对应, 所以arr[i][j] 应该对应 arr[i-1][j-1]
  •  计算区间的面积, 假设是红色区域


    所以我们只需要直到要求面积的左上下标x1y1 右下下标x2y2 即可

  • 计算x1应该等于i-k, 但是如果越界, 只能按0算, 所以应该取i-k和0的最大值, y2同理
    计算x1应该等于i+k, 但是如果越界, 只能按m-1算, 所以应该取i+k和m-1的最小值, y2同理

  • 使用前缀和数组, 需要重新创建一个矩阵ret, 存放结果, 大小为m * n, 和前缀和矩阵又不对应, x1y1x2y2对应的是前缀和的下标, 那么带入结果时, 只需要每个+1即可, 即
     int x1 = Math.max(0, i - k) + 1;
     int y1 = Math.max(0, j - k) + 1;
     int x2 = Math.min(m - 1, i + k) + 1;
     int y2 = Math.min(n - 1, j + k) + 1;

代码:

class Solution {
    public int[][] matrixBlockSum(int[][] mat, int k) {
        int m = mat.length;
        int n = mat[0].length;
        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];
            }
        }
        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;
                int y1 = Math.max(0, j - k) + 1;
                int x2 = Math.min(m - 1, i + k) + 1;
                int 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;
    }
}

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

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

相关文章

Android 动效整理

Android自定义SeekBar&#xff0c;滑动时弹出气泡指示器显示进度 安卓开发中非常炫的效果集合_android 开发 向右上角收起炫酷动态效果-CSDN博客 https://github.com/shenghuntianlang/Android-Views?tabreadme-ov-file#decentbanner 以前收藏了很多文章&#xff0c;但是过…

服务器端口转发,服务器端口转发的作用、好处与坏处

服务器端口转发&#xff0c;服务器端口转发的作用、好处与坏处。 服务器端口转发是一种关键的网络技术&#xff0c;它在网络安全和通信中发挥着不可替代的作用。其主要功能是将来自一个端口的网络流量转发到另一个端口&#xff0c;从而实现内外网之间的流量交互。这种技术通常…

对竞品分析的理解

一、竞品分析是什么 竞品分析即对竞争对手进行分析&#xff0c;是市场研究中的一项重要工作&#xff0c;它可以帮助企业了解竞争对手的产品、策略、市场表现等信息&#xff0c;通过竞品分析可以为自己的产品制定更加精准的策略。 二、为什么要做竞品分析 1.了解市场情况 了解…

2024.05.22学习记录

1、面经复习&#xff1a; Vue组件通讯、vuex、js严格模式、options请求、vue3 Setup 语法糖、React hook 2、代码随想录刷题&#xff1a;动态规划 3、rosebush组件库 完成Alert和Alert测试 Menu组件初步开发

第十七讲:结构体

第十七讲&#xff1a;结构体 1.初始结构体1.1结构体声明1.2结构体变量的创建和初始化1.2.1结构体变量的创建1.2.2结构体变量的初始化1.2.2.1普通初始化1.2.2.2结构体数组1.2.2.3结构体指针 1.3typedef定义结构体1.4结构体的自引用1.5结构体的特殊声明 2.结构体内存对齐2.1对齐规…

数据结构 顺序表

目录 1. 什么是数据结构&#xff1f;2. 顺序表2.1 线性表2.2 顺序表 3. 动态顺序表的实现 正文开始 1. 什么是数据结构&#xff1f; 在学习顺序表前&#xff0c;我们先来了解一下什么是数据结构&#xff1a;数据结构是计算机存储、组织数据的方式&#xff0c;具有一定逻辑关系…

Unity OutLine 模型外描边效果

效果展示&#xff1a; 下载链接

Golang文件操作

文章目录 文件操作基本介绍普通的文件操作方式&#xff08;os包&#xff09;带缓冲的文件操作方式&#xff08;bufio包&#xff09;文件拷贝操作&#xff08;io包&#xff09; 命令行参数基本介绍解析命令行参数&#xff08;flag包&#xff09; JSON基本介绍JSON序列化JSON反序…

linux网卡MAC地址

1、ifconfig命令查看网卡MAC地址 1.1 通过HWaddr或ether字段过滤mac地址 ifconfig | grep HWaddr ifconfig | grep ether [rootlocalhost ~]# /sbin/ifconfig | grep ether 注&#xff1a;有些Linux发行版本的MAC地址字段为HWaddr&#xff0c;有些Linux发行版本的MAC地址字段…

2024年电工杯数学建模竞赛思路资料汇总贴

下文包含&#xff1a;2024电工杯&#xff08;电工杯数学建模竞赛&#xff09;思路解析、电工杯参赛时间及规则信息说明、好用的数模技巧及如何备战数学建模竞赛 C君将会第一时间发布选题建议、所有题目的思路解析、相关代码、参考文献、参考论文等多项资料&#xff0c;帮助大家…

实战演练:一文教你将交换机纳入K8s,对容器进行纳管

随着云计算的发展和云原生应用的兴起&#xff0c;容器技术成为一种流行的应用部署和管理方式。容器化应用程序具有轻量、可移植和可扩展的特点&#xff0c;能够快速部署和运行在不同的环境中。Kubernetes作为一个容器编排平台&#xff0c;为云原生应用的部署、管理和自动化提供…

【Rust日报】ratatui版本更新

[new ver] ratatui v0.26.3 一个构建终端用户界面的库。新版本包括&#xff1a; 修复Unicode 截断 bug对颜色更好地序列化更快的渲染弃用assert_buffer_eq宏暴露错误类型常量函数和类型 官网: https://ratatui.rs/ 链接: https://ratatui.rs/highlights/v0263/ [new lib] ansi2…

1.5.3 基于Java配置方式使用Spring MVC

本实战教程主要介绍了如何使用Java配置方式来使用Spring MVC框架。相较于XML配置方式&#xff0c;Java配置方式提供了一种更为简洁和灵活的配置方法。 项目创建与配置 创建一个Jakarta EE项目&#xff0c;并设置项目名称和位置。选择Jakarta EE 10版本&#xff0c;不添加依赖&a…

2024年必看!会声会影神器升级,让你的视频制作技能直线上升

在数字媒体内容呈现爆炸式增长的今天&#xff0c;无论是个人还是企业&#xff0c;都开始重视视频制作与编辑的质量。一款优秀的视频编辑软件&#xff0c;不仅需要具备强大的功能&#xff0c;更需要提供直观、高效的用户体验。在这样的背景下&#xff0c;会声会影2024应运而生&a…

Mujoco仿真【xml文件的学习 4】

在学习Mujoco仿真的过程中&#xff0c;mujoco的版本要选择合适。先前我将mujoco的版本升级到了mujoco-3.1.4&#xff0c;在运行act的仿真代码时遇到了问题&#xff0c;撰写了博客&#xff1a; Aloha机械臂的mujoco仿真问题记录-CSDN博客 下面在进行mujoco仿真时&#xff0c;统…

OpenAI 再次刷新认知边界:GPT-4 颠覆语音助手市场,流畅度直逼真人互动?

前言 近日&#xff0c;美国人工智能研究公司 OpenAI 发布了其最新旗舰模型 GPT-4o&#xff0c;这一革命性的进展不仅标志着人工智能领域的新突破&#xff0c;更预示着即将步入一个全新的交互时代&#xff1f;GPT-4o 的发布&#xff0c;对于我们来说&#xff0c;意味着人工智能…

数据集004:跌倒检测数据集 (含数据集下载链接)

数据集简介&#xff1a; 该数据集为跌倒检测数据集&#xff0c;属于imageclassify任务&#xff0c;分为fall和nofall两大类&#xff0c;累计共1000张图片&#xff0c;均为人工标注 xml格式&#xff0c;可用于yolo训练。 数据集链接&#xff1a;跌倒检测数据集&#xff08;1000…

在virtualbox中ubuntu如何利用mobaxterm来拖拽文件

首先得先利用ssh、ubuntu的ip 一、开启ssh 安装 openssh-server sudo apt-get install openssh-server 检查 ssh 服务是否启动成功 sudo ps -e | grep ssh 如果有 sshd 则说明 ssh 服务已启动&#xff0c;如果没有启动&#xff0c;输入下边命令启动 ssh 服务 sudo servi…

Latex公式编辑:在矩阵内画横线与竖线

在LaTeX中&#xff0c;要在矩阵内绘制横线和竖线&#xff0c;我们通常使用array或matrix环境&#xff0c;并结合\hline&#xff08;用于横线&#xff09;和|&#xff08;用于竖线&#xff09;来实现。但需要注意的是&#xff0c;\hline通常用于表格环境中。 LaTeX中绘制分块矩阵…

Transformers集成SwanLab实现AI训练可视化监控

&#x1f917;HuggingFace Transformers Hugging Face 的 Transformers 是一个非常流行的开源库&#xff0c;它提供了大量预训练的模型&#xff0c;主要用于自然语言处理&#xff08;NLP&#xff09;任务。这个库的目标是使最新的模型能够易于使用&#xff0c;并支持多种框架&…