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

这篇具有很好参考价值的文章主要介绍了11-数组-二维区域和检索 - 矩阵不可变。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这是数组的第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:

11-数组-二维区域和检索 - 矩阵不可变,白话算法,算法,数据结构

输入: 
["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里面维护一个横/纵坐标的和的列表即可。文章来源地址https://www.toymoban.com/news/detail-820839.html

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
}

到了这里,关于11-数组-二维区域和检索 - 矩阵不可变的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leetcode303. 区域和检索 - 数组不可变(java)

    难度 - 简单 原题链接 - 区域和检索 - 数组不可变 给定一个整数数组 nums,处理以下类型的多个查询: 计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left = right 实现 NumArray 类: NumArray(int[] nums) 使用数组 nums 初始化对象 int sumRange(int i, int j) 返回数组 num

    2024年02月12日
    浏览(43)
  • 【算法训练-数组 三】【数组矩阵】螺旋矩阵、旋转图像、搜索二维矩阵

    废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是螺旋矩阵,使用【二维数组】这个基本的数据结构来实现 二维数组的结构特性入手 根据题目示例 matrix = [[1,2,3],[4,5,6],[7,8,9]] 的对应输出 [1,2,3,6,9,8,7,4,5] 可以发现,顺时针打印矩阵的顺序

    2024年02月06日
    浏览(52)
  • 【算法挨揍日记】day16——525. 连续数组、1314. 矩阵区域和

    525. 连续数组 给定一个二进制数组  nums  , 找到含有相同数量的  0  和  1  的最长连续子数组,并返回该子数组的长度。 本题的元素只有0和1,根据题目意思,我们可以把题目看成找一段最长的子区间使得区间的0 和1的数量相同,我们可以对其优化将所有的0变成-1,这样这

    2024年02月03日
    浏览(48)
  • 数据结构与算法—一维数组、二维数组、矩阵、顺序串、链接串的C++代码实现

    1、一维数组:ArrayOneD.h 数组这种数据结构可以看作线性表的推广。数组一般采用顺序存储的方法表示。 这是一个模板类 ArrayOneD 的实现,用于表示一维数组。它包括了 构造函数、拷贝构造函数、析构函数、重载下标运算符、重载赋值运算符、求数组长度、重新设置数组长度

    2024年02月07日
    浏览(61)
  • 算法——前缀和之除自身以外数组的乘积、和为K的子数组、和可被K整除的子数组、连续数组、矩阵区域和

    这几道题对于我们前面讲过的一维、二维前缀和进行了运用,包含了面对特殊情况的反操作 目录 4.除自身以外数组的乘积 4.1解析 4.2题解 5.和为K的子数组 5.1解析 5.2题解 6.和可被K整除的子数组 6.1解析 6.2题解 7.连续数组 7.1题解 7.2题解 8.矩阵区域和 8.1解析 8.2题解 4.除自身以外

    2024年04月14日
    浏览(43)
  • 算法学习——LeetCode力扣补充篇11(64. 最小路径和、48. 旋转图像 、169. 多数元素、394. 字符串解码、240. 搜索二维矩阵 II )

    64. 最小路径和 - 力扣(LeetCode) 描述 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 示例 1: 输入:grid = [[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径 1→3→1→

    2024年04月23日
    浏览(38)
  • C语言例题(二维数组)【转置矩阵】【成绩登记】【斐波那契】【简单矩阵查找】【螺旋数阵】【一维数组转二维数组】

    例一:转置矩阵 程序: 输出:通过b[j][i] = a[i][j];这一步实现了转置 进阶:用6个1~20内的随机数按行的顺序生成一个a[2][3]的矩阵,并输出它的转置矩阵 输出: 例2.登记某班三人的数学、英语两门课程的成绩。 分析:此类问题可以通过使用3个一维数组来解决,也可以通过使用

    2024年02月03日
    浏览(45)
  • LeetCode-74. 搜索二维矩阵【数组 二分查找 矩阵】

    给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。 示例 1: 输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]],

    2024年04月14日
    浏览(47)
  • 使用二维数组表示N阶矩阵

    矩阵为N阶,使用二维数组a[N-1][N-1]表示。 矩阵元素使用二维数组元素a[i][j]表示。 访问矩阵元素时,遍历下标表示为 a[i][j] , i为行下标,j为列下标 ,它们的取值范围均为 [0,N-1] 。 矩阵的术语与二维数组下标的对应关系如下表: 矩阵术语与二维数组下标对应关系 术语

    2023年04月24日
    浏览(42)
  • C语言 : 矩阵转置 (二维数组)

    输入N*N的矩阵,输出它的转置矩阵。矩阵的转置操作,即把矩阵的行元素变为列元素、列元素变为行元素的过程。    第一行为整数N,接着是一个N*N的矩阵。 转置矩阵。 输入样例 1 输出样例 1 解题思路: 输入二维数组。(用到for循环) 将二维数组的行与列互换。(需要两

    2024年01月21日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包