社区论坛自助建站网,临海如何制作公司网站框架,网站平台建设方案的难点重点,微信公众平台和微网站的区别前缀和数组 二维区域和检索 - 矩阵不可变题目描述前缀和代码演示 一维数组前缀和 二维区域和检索 - 矩阵不可变 难度 - 中等 原题链接 - 二维区域和检索 - 矩阵不可变 题目描述 给定一个二维矩阵 matrix#xff0c;以下类型的多个请求#xff1a; 计算其子矩形范围内元素的总… 前缀和数组 二维区域和检索 - 矩阵不可变题目描述前缀和代码演示 一维数组前缀和 二维区域和检索 - 矩阵不可变 难度 - 中等 原题链接 - 二维区域和检索 - 矩阵不可变 题目描述 给定一个二维矩阵 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] 1e5 0 row1 row2 m 0 col1 col2 n 最多调用 104 次 sumRegion 方法 前缀和 和一维数组类似.也是先定义一个前缀和数组,求出前缀和的值,然后调用区间值时,就可以用前缀和进行计算. 注意:前缀和数组下标从1开始. 代码演示
class NumMatrix {int[][] sums;public NumMatrix(int[][] matrix) {int m matrix.length;if (m 0) {int n matrix[0].length;sums new int[m 1][n 1];for (int i 0; i m; i) {for (int j 0; j n; j) {sums[i 1][j 1] sums[i][j 1] sums[i 1][j] - sums[i][j] matrix[i][j];}}}}public int sumRegion(int row1, int col1, int row2, int col2) {return sums[row2 1][col2 1] - sums[row1][col2 1] - sums[row2 1][col1] sums[row1][col1];}}一维数组前缀和
leetcode303. 区域和检索 - 数组不可变