博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Range Sum Query 2D - Immutable 二维区域和检索 - 不可变
阅读量:5329 次
发布时间:2019-06-14

本文共 1692 字,大约阅读时间需要 5 分钟。

 

Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper left corner (row1, col1) and lower right corner (row2, col2).

Range Sum Query 2D

The above rectangle (with the red border) is defined by (row1, col1) = (2, 1) and (row2, col2) = (4, 3), which contains sum = 8.

Example:

Given matrix = [  [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]]sumRegion(2, 1, 4, 3) -> 8sumRegion(1, 1, 2, 2) -> 11sumRegion(1, 2, 2, 4) -> 12

Note:

  1. You may assume that the matrix does not change.
  2. There are many calls to sumRegion function.
  3. You may assume that row1 ≤ row2 and col1 ≤ col2.

 

这道题让我们求一个二维区域和的检索,是之前那道题的延伸。有了之前那道题的基础,我们知道这道题其实也是换汤不换药,还是要建立一个累计区域和的数组,然后根据边界值的加减法来快速求出给定区域之和。这里我们维护一个二维数组dp,其中dp[i][j]表示累计区间(0, 0)到(i, j)这个矩形区间所有的数字之和,那么此时如果我们想要快速求出(r1, c1)到(r2, c2)的矩形区间时,只需dp[r2][c2] - dp[r2][c1 - 1] - dp[r1 - 1][c2] + dp[r1 - 1][c1 - 1]即可,下面的代码中我们由于用了辅助列和辅助行,所以下标会有些变化,参见代码如下:

 

class NumMatrix {public:    NumMatrix(vector
> &matrix) { if (matrix.empty() || matrix[0].empty()) return; dp.resize(matrix.size() + 1, vector
(matrix[0].size() + 1, 0)); for (int i = 1; i <= matrix.size(); ++i) { for (int j = 1; j <= matrix[0].size(); ++j) { dp[i][j] = dp[i][j - 1] + dp[i - 1][j] - dp[i - 1][j - 1] + matrix[i - 1][j - 1]; } } } int sumRegion(int row1, int col1, int row2, int col2) { return dp[row2 + 1][col2 + 1] - dp[row1][col2 + 1] - dp[row2 + 1][col1] + dp[row1][col1]; } private: vector
> dp;};

 

类似题目:

 

 

转载于:https://www.cnblogs.com/grandyang/p/4958789.html

你可能感兴趣的文章
golang日志收集方案之ELK
查看>>
进程间通讯:实现基于多进程的文件拷贝
查看>>
Java多线程:线程同步与关键字synchronized
查看>>
序列化之二
查看>>
PHP基础1
查看>>
As-If-Serial 理解
查看>>
Python pandas学习总结
查看>>
P5018 对称二叉树
查看>>
Java——异常处理,数据库连接
查看>>
[leetcode 2] Add Two Numbers
查看>>
MYSQL SHOW VARIABLES简介
查看>>
从程序员到项目经理(7):程序员加油站 -- 完美主义也是一种错
查看>>
雷林鹏分享:Redis 简介
查看>>
自卑都是自己不踏实做事的表现
查看>>
C# 网页自动填表自动登录 .
查看>>
netfilter 和 iptables
查看>>
洛谷P1005 矩阵取数游戏
查看>>
Django ORM操作
查看>>
Problem Collection II 构造
查看>>
用swift写的一款小游戏,模仿的僵尸危机
查看>>