LeetCode 刷题系列 -- 304. 二维区域和检索 - 矩阵不可变

news2024/11/29 10:32:29

给定一个二维矩阵 matrix,以下类型的多个请求:

  • 计算其子矩形范围内元素的总和,该子矩阵的 左上角(row1, col1)右下角(row2, col2)

实现 NumMatrix 类:

  • NumMatrix(int[][] matrix) 给定整数矩阵 matrix 进行初始化

  • int sumRegion(int row1, int col1, int row2, int col2) 返回 左上角 (row1, col1)右下角 (row2, col2) 所描述的子矩阵的元素 总和

示例 1:

输入:

["NumMatrix","sumRegion","sumRegion","sumRegion"]

[[[[3,0,1,4,2],[5,6,3,2,1],[1,2,0,1,5],[4,1,0,1,7],[1,0,3,0,5]]],[2,1,4,3],[1,1,2,2],[1,2,2,4]]

输出:

[null, 8, 11, 12]

解释:

NumMatrix numMatrix = new NumMatrix([[3,0,1,4,2],[5,6,3,2,1],[1,2,0,1,5],[4,1,0,1,7],[1,0,3,0,5]]);

numMatrix.sumRegion(2, 1, 4, 3); // return 8 (红色矩形框的元素总和)

numMatrix.sumRegion(1, 1, 2, 2); // return 11 (绿色矩形框的元素总和)

numMatrix.sumRegion(1, 2, 2, 4); // return 12 (蓝色矩形框的元素总和)

提示:

  • m == matrix.length

  • n == matrix[i].length

  • 1 <= m, n <= 200

  • -105 <= matrix[i][j] <= 105

  • 0 <= row1 <= row2 < m

  • 0 <= col1 <= col2 < n

  • 最多调用 104 次 sumRegion 方法

304. 二维区域和检索 - 矩阵不可变 - 力扣(Leetcode)

思路

因为 sumRegion 方法会调用多次,所以若是每次都计算一下矩形的和,时间复杂度不符合要求。
因此,可以使用前缀和的方式求出从 (0, 0) 到 (i, j) 的矩形和

c++

class NumMatrix {
public:
    vector<vector<int>> preSumMatrix;
    NumMatrix(vector<vector<int>>& matrix) {
        int row = matrix.size();
        int col = matrix[0].size();

        preSumMatrix = vector<vector<int>>(row, vector<int>(col, 0));

        for(int i=0; i<row; i++) {
            if(i==0) {
               preSumMatrix[i][0] = matrix[i][0];
            } else {
                preSumMatrix[i][0] = preSumMatrix[i-1][0] + matrix[i][0];
            }
        }

        for(int j=0; j<col; j++) {
            if(j==0) {
               preSumMatrix[0][j] = matrix[0][j];
            } else {
                preSumMatrix[0][j] = preSumMatrix[0][j-1] + matrix[0][j];
            }
        }

        for(int i=1; i<row; i++) {
            for(int j=1; j<col; j++) {
                preSumMatrix[i][j] = matrix[i][j] + preSumMatrix[i-1][j] + preSumMatrix[i][j-1] - preSumMatrix[i-1][j-1];
            }
        }

    }
    
    int sumRegion(int row1, int col1, int row2, int col2) {
            if(row1 == 0 && col1 == 0) {
                return preSumMatrix[row2][col2];
            } else if(row1 == 0 && col1 != 0) {
                return preSumMatrix[row2][col2] - preSumMatrix[row2][col1-1];
            } else if(row1 != 0 && col1 == 0) {
                return preSumMatrix[row2][col2] - preSumMatrix[row1-1][col2];
            } else {
                return preSumMatrix[row2][col2] - preSumMatrix[row2][col1-1] - preSumMatrix[row1-1][col2] + preSumMatrix[row1-1][col1-1];
            }
           
    }
};

/**
 * Your NumMatrix object will be instantiated and called as such:
 * NumMatrix* obj = new NumMatrix(matrix);
 * int param_1 = obj->sumRegion(row1,col1,row2,col2);
 */

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

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

相关文章

我去,竟可直接用命令行操作ChatGPT

ChatGPT 确实杀疯了&#xff0c;已经有 1亿 月活用户了&#xff0c;毕竟它真的有智能的样子。 我前些年还开发过智能客服系统&#xff0c;要是早点遇到 ChatGPT&#xff0c;估计可以省了不少事。 我想接下来有许多业务场景都会使用到它&#xff0c;比如教学&#xff0c;内容创…

OpenCV-PyQT项目实战(5)项目案例01图像模糊

欢迎关注『OpenCV-PyQT项目实战 Youcans』系列&#xff0c;持续更新中 OpenCV-PyQT项目实战&#xff08;1&#xff09;安装与环境配置 OpenCV-PyQT项目实战&#xff08;2&#xff09;QtDesigner 和 PyUIC 快速入门 OpenCV-PyQT项目实战&#xff08;3&#xff09;信号与槽机制 …

毫米波雷达人体存在感应营造更智能的生活

毫米波雷达人体存在感应的工作原理基于多普勒效应&#xff0c;精准度高、稳定性强&#xff0c;其可以穿透非金属物质&#xff0c;比如薄木板、衣服、塑料等物质。 科技改变生活&#xff0c;营造更智能化的生活&#xff0c;最重要的是能够对人体存在进行精准检测&#xff0c;人体…

Git多人协同远程开发

1. 李四&#xff08;项目负责人&#xff09;操作步骤 在github中创建远程版本库testgit将基础代码上传⾄testgit远程库远程库中基于main分⽀创建dev分⽀将 githubleaflife/testgit 共享给组员李四继续在基础代码上添加⾃⼰负责的模块内容 2. 张三、王五&#xff08;组员&…

【树和二叉树】数据结构二叉树和树的概念认识

前言&#xff1a;在之前&#xff0c;我们已经把栈和队列的相关概念以及实现的方法进行了学习&#xff0c;今天我们将认识一个新的知识“树”&#xff01;&#xff01;&#xff01; 目录1.树概念及结构1.1树的概念1.2树的结构1.3树的相关概念1.4 树的表示1.5 树在实际中的运用&a…

SpringBoot:拦截器,过滤器,打包与运行

目录 一、拦截器 1、创建实现类实现HandlerInterceptor 接口 2、注册拦截器对象 二、过滤器 拦截器与过滤器区别 三、打包运行windows版&#xff08;jar包&#xff0c;war包&#xff09; 1、打包为jar包 2、打包为 war包 一、拦截器 拦截器(Interceptor )是一种动态拦截…

二叉搜索树——BinarySearchTree

致前行的人&#xff1a; 要努力&#xff0c;但不要着急&#xff0c;繁花锦簇&#xff0c;硕果累累&#xff0c;都需要过程&#xff01; 目录 1.二叉搜索树 1.1二叉搜索树概念 1.2二叉搜索树的操作 1.3二叉搜索树的实现 2.4二叉搜索树的应用 2.5二叉搜索树的性能分析 2.二…

不用U盘 重装系统(别再浪费钱去电脑城装系统了)

不用U盘 重装系统&#xff08;别再浪费钱去电脑城装系统了&#xff09; 首先打开浏览器&#xff0c;搜索MSDN回车&#xff0c;选择第一个网站 点击操作系统 往下拉找到win10专业版 选择&#xff08;business editions&#xff09;和 (x64) 打开迅雷&#xff0c;点击新建&a…

高德地图开发实战案例:使用Loca数据源展示海量点标注(海量点、自定义分类图标、聚合、信息提示、3D控件)

系列文章目录 高德地图开发实战案例:弧线连接线标注高德地图开发智慧社区网格化数据格式产生的无法单击事件的解决方案高德地图进阶开发实战案例(1):webAPI坐标转换和jsAPI批量转换高德地图进阶开发实战案例(2):电子围栏&#xff08;多边形的绘制&#xff09;的展示高德地图进…

与chatGPT的第一次亲密接触

最近&#xff0c;chatGPT火了&#xff0c;不管传统媒体&#xff0c;还是各种自媒体平台都在说它。今天我突然也想注册一个玩玩&#xff0c;注册前2步还行&#xff0c;但是等点开邮箱校验时&#xff0c;打开网页显示&#xff1a; 上网查了一下&#xff0c;没向中国开放服务&…

Java高手速成 | 对象-关系的映射、映射对象标识符与JPA API的级联操作

01、对象-关系的映射概念 Java对象和关系数据库存在一些简单的映射关系&#xff0c;比如Customer类与CUSTOMERS表映射&#xff0c;一个Customer对象与CUSTOMERS表中的一条记录映射&#xff0c;Customer类的name属性与CUSTOMERS表的NAME字段映射。 但是&#xff0c;毕竟对象模型…

有了独自开,一个人就是一个团队

文章目录 简单介绍优点 优秀案例平台福利总结 简单介绍 独自开是一个基于商品与服务交易全流程的PaaS开发平台。对于开发者&#xff0c;独自开可以协助开发者一个人独自开发一套系统。 优点 独自开有独创的分层标准化平台架构&#xff0c;可以满足系统的任何个性化需求。 …

PICT:一款功能强大的信息收集和事件响应工具

关于PICT PICT是一款功能强大的信息收集和事件响应工具&#xff0c;该工具可以帮助广大研究人员在受感染的终端节点中收集各种信息&#xff0c;以辅助进行网络安全事件应急响应。这些数据可能不够完整&#xff0c;但确实能够捕捉到很多有价值的取证信息。如果你想要获取完整的…

搜广推 隐语义模型(LMF)与矩阵分解(MF)

😄 MF的出现就是为了解决CF处理稀疏矩阵能力弱的问题,增强泛化能力。挖掘用户和物品的隐含兴趣和隐含特征。 ⭐ 在这里隐语义模型LMF在这里也就是利用MF对用户评分矩阵分解出来的用户隐向量矩阵、物品隐向量矩阵,然后基于这两个矩阵就可以计算得分,完成推荐任务。 🚀 MF…

我猜这将是程序员副业接单赚外快的最好的平台!

文章目录一、前言二、【独自开】介绍2.1 分层标准化平台架构2.2 集成第三方数字接口2.3 支持各个行业的系统定制开发三、如何在【独自开】赚钱获取收益?3.1 如何称为【独自开】开发者?3.2 如何领取任务赚取收益四、【独自开】优秀案例4.1 家政服务平台4.2 优选商城五、【独自…

设计模式之观察者模式,以C++为例。

今天来准备浅浅的过一下观察者模式&#xff0c;观察者模式也叫作&#xff1a;发布者订阅者模式。该模式的特点是多个对象依赖一个对象&#xff0c;为一对多依赖关系&#xff0c;每当一个对象改变时&#xff0c;所有依赖它的对象都会得到通知并自动更新&#xff0c;该模式主要维…

MySQL数据同步到ES集群(MySQL数据库与ElasticSearch全文检索的同步)

简介&#xff1a;MySQL数据库与ElasticSearch全文检索的同步&#xff0c;通过binlog的设置对MySQL数据库操作的日志进行记录&#xff0c;利用Python模块对日志进行操作&#xff0c;再利用kafka的生产者消费者模式进行订阅&#xff0c;最终实现MySQL与ElasticSearch间数据的同步…

C++类和对象:面向对象编程的核心。| 面向对象还编什么程啊,活该你是单身狗。

&#x1f451;专栏内容&#xff1a;C学习笔记⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;日拱一卒&#xff0c;功不唐捐 文章目录一、前言二、面向对象编程三、类和对象1、类的引入2、类的定义Ⅰ、声明和定义在一起Ⅱ、声明和定义分开Ⅲ、成员变量命…

ChatGPT 怎么注册使用最新详细教程-新手小白

2022年11月30日chatGPT发布&#xff0c;一年时间风靡全美&#xff0c;甚至有调查&#xff0c;美国89%的大学生用chatGPT做作业&#xff0c;微软用100亿美元投资了该公司&#xff0c;这也引起了google的紧张&#xff0c;神经语言、人工智能、颠覆未来&#xff0c;成为描述chatGP…

VR博物馆带你走进云端,感受数字时代的力量

博物之志&#xff0c;以文化人&#xff0c;为了打破传统线上静态的博物馆图片&#xff0c;VR博物馆给民众带来了全新的视听体验&#xff0c;突破天气、交通、客流量等传统旅游限制问题&#xff0c;在VR全景中还能将线下博物馆的多媒体影响也逐一呈现出来&#xff0c;接下来让我…