11-数组-二维区域和检索 - 矩阵不可变

news2024/12/25 9:17:22

这是数组的第11篇算法,力扣链接。

给定一个二维矩阵 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 (蓝色矩形框的元素总和)

 这道题其实就是看着吓人,其实在我们自维护的type里面维护一个横/纵坐标的和的列表即可。

type NumMatrix struct {
	sumHeight [][]int
}

func Constructor(matrix [][]int) NumMatrix {
	sumHeight := make([][]int, len(matrix))
	for ri, row := range matrix {
		if sumHeight[ri] == nil {
			sumHeight[ri] = make([]int, len(matrix[0]))
		}
		for ci, col := range row {
			if ri == 0 {
				sumHeight[ri][ci] = col
			} else {
				sumHeight[ri][ci] = col + sumHeight[ri-1][ci]
			}
		}
	}
	return NumMatrix{
		sumHeight: sumHeight,
	}
}

func (this *NumMatrix) SumRegion(row1 int, col1 int, row2 int, col2 int) int {
	result := 0
	for i := col1; i <= col2; i++ {
		if row1 == 0 {
			result += this.sumHeight[row2][i]
		} else {
			result += this.sumHeight[row2][i] - this.sumHeight[row1-1][i]
		}
	}
	return result
}

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

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

相关文章

低代码开发中的Nacos配置:跨平台跳转的解决方案

在当今低代码开发的时代&#xff0c;平台的易用性和灵活性非常重要。右上角平台跳转作为用户界面中常见的交互元素&#xff0c;对于提高用户体验具有举足轻重的地位。然而&#xff0c;有时候我们会遇到跳转失效的情况&#xff0c;这无疑给用户带来了困扰。本文以JVS低代码平台为…

谷歌 2024 新年目标曝光:一边做地表最强 AI,一边裁更多员工丨 RTE 开发者日报 Vol.132

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

【软考中级】3天擦线过软考中级-软件设计师

前提&#xff1a;已有数据结构、操作系统、计算机网络、数据库基础 &#xff08;风险系数较高&#xff0c;请谨慎参考&#xff09; 贴一个成绩单hhhh 弯路&#xff1a;很早之前有看过一遍网上的软考课程&#xff0c;也记录了一些笔记&#xff0c;然而听完还是啥都记不住。 推…

【Linux工具篇】软件包管理器yum

目录 什么是软件包 什么是yum Linux系统的生态 yum的相关操作 如何搜索软件 如何安装软件 如何卸载软件 关于rzsz rz&window->Linux sz&Linux->windows wget&scp&Linux<->Linux yum本地配置 如何配置&#xff1f; 有趣好玩的Linux …

移动开发行业——鸿蒙OS NEXT开出繁花

1月18日&#xff0c;华为宣布HarmonyOS NEXT开发者预览版开放申请&#xff0c;根据官方注解&#xff0c;这个版本的鸿蒙系统有个更通俗易懂的名字——“星河版”&#xff0c;也被称为“纯血”鸿蒙。 根据官方解释&#xff0c;之所以取名星河版&#xff0c;寓意鸿蒙OS NEXT就像…

拉脱维亚市场开发攻略,带你走进“波罗的海之珠”

拉脱维亚是东欧的一个发达资本主义国家&#xff0c;也是欧盟成员国&#xff0c;是一个开放型经济体&#xff0c;经济增长率也是在欧盟排前列。中国是拉脱维亚除了欧盟以外第二大贸易国&#xff0c;拉脱维亚经济发达&#xff0c;市场稳定&#xff0c;市场潜力还是非常不错的&…

IP地址和端口

1. IP地址&#xff1a; 简介&#xff1a; IP 协议是为计算机网络相互连接进行通信而设计的协议。在因特网中&#xff0c;它是能使连接到网上的所 有计算机网络实现相互通信的一套规则&#xff0c;规定了计算机在因特网上进行通信时应当遵守的规则。任 何厂家生产的计算机系统…

MySQL学习(1):centos7安装MySQL

1.安装自己系统对应的MySQL版本 1.1查看自己系统的内核版本 cat /etc/redhat-release 可以看到我的系统版本是centos7.6 1.2去官网下载对应的MySQL安装文件 MySQL官网&#xff1a; https://dev.mysql.com/downloads/ 点击MYSQL Community Server 然后可以在索引的位置选…

VSCode插件 —— Cody AI (免费AI助手!)

之前介绍过一款 阿里云免费的AI开发工具——通义灵码 TONGYI Lingma 本文再推荐一个可以极大提高开发前端开发效率的工具 —— Cody AI &#xff08;Sourcegraph&#xff09;&#xff0c;同样是免费的&#xff01; 不过&#xff0c;使用Cody AI需要有github 或 Google 、 git…

全国各城市绿地及绿化面积数据,shp/excel格式,2020-2022年

基本信息. 数据名称: 全国各城市绿地及绿化面积数据 数据格式: Shp、excel 数据时间: 2020-2022年 数据几何类型: 面 数据坐标系: WGS84 数据来源&#xff1a;网络公开数据 数据字段&#xff1a; 序号字段名称字段说明1province省份名称2city城市名称4city_dm城市…

Unity 适配器模式(实例详解)

文章目录 简介1. **Input Adapter 示例**2. **Component Adapter 示例**3. **网络数据解析适配器**4. **物理引擎适配**5. **跨平台服务适配** 简介 Unity中的适配器模式&#xff08;Adapter Pattern&#xff09;主要用于将一个类的接口转换为另一个接口&#xff0c;以便于原本…

STM32入门教程-2023版【4-2】OLED显示屏简介

关注 点赞 不错过精彩内容 大家好&#xff0c;我是硬核王同学&#xff0c;最近在做免费的嵌入式知识分享&#xff0c;帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! 本小结学习一下如何使用OLED显示屏的函数驱动模块 一、OLED显示屏简介 &#xff08;1&#xff09;…

Linux切换jdk版本

参考文献&#xff1a;Linux 多个JDK的版本 脚本切换 - C小海 - 博客园 (cnblogs.com)

字符串变换最小字符串 - 华为OD统一考试

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 给定一个字符串s, 最多只能进行一次变换, 返回变换后能得到的最小字符串(按照字典序进行比较)。 变换规则: 交换字符串中任意两个不同位置的字符。 输入描述 一串小写字母组成的字符串s。 输出描…

小型园区组网实例

目录 拓扑需求IP规划路由配置交换机配置NAT配置ACL配置DHCP配置配置过程&#xff1a;配置结果&#xff1a; OSPF配置链路聚合配置配置过程&#xff1a; 网络测试 拓扑 需求 企业网络信息服务平台需实现功能&#xff1a;企业网站服务器、FTP服务器、DNS服务器。企业ip分配地址段…

南阳市学校火灾致13人遇难 富维烟火识别防止悲剧再次发生

近日&#xff0c;南阳市方城县独树镇英才学校不幸发生火灾事故&#xff0c;造成13人遇难&#xff0c;社会各界为此深感悲痛。在这一悲剧发生后&#xff0c;公众对火灾预防的关注度急剧上升。面对这样的情况&#xff0c;北京富维图像公司及时推出了其FIS智能图像识别系统的烟火识…

C++ Primer 第十二章 动态内存 重点解读

文章目录 1 动态内存与智能指针1.1 shared_ptr类1.1.1 shared_ptr的方法1.1.2 make_shared函数 1.2 智能指针和异常1.3 unique_ptr1.3.1 传递unique_ptr参数和返回unique_ptr1.3.2 向unique_ptr传递删除器1.3.3 习题补充 1.4 weak_ptr 2 直接内存管理2.1 new2.2 delete2.4 shar…

电脑文件夹怎么加密?文件夹加密方法介绍

文件夹作为电脑文件管理的重要工具&#xff0c;可以帮助我们有效管理电脑数据。而为了避免数据泄露&#xff0c;我们需要加密文件夹。那么&#xff0c;电脑文件夹该怎么加密呢&#xff1f;下面我们就来了解一下。 方法一&#xff1a;EFS加密 在文件夹上单击鼠标右键&#xff0…

SAP 五个报废率设置简介(上)

通常在生产制造过程中都会面临报废率的问题,生产工艺路线的问题,原材料质量的问题,总会有一些产品在生产过程中被做成报废品,通常报废率的设置有时候会遵循行业的标准设置,亦或者根据工厂生产中统计的历史数据分析后根据不同的产品设置不同的报废率,从而在执行物料的采购…

在Ubuntu上安装pycuda记录

1. 安装CUDA Toolkit 11.8 从MZ小师妹的摸索过程来看&#xff0c;其他版本的会有bug&#xff0c;12.0的版本太高&#xff0c;11.5的太低&#xff08;感谢小师妹让我少走弯路&#xff09; 参考网址&#xff1a;CUDA Toolkit 11.8 Downloads | NVIDIA Developer 在命令行输入命…