leetcode 304. Range Sum Query 2D - Immutable(递推)
2016-04-19 23:20
197 查看
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).
The above rectangle (with the red border) is defined by (row1, col1) = (2, 1) and (row2, col2) = (4, 3), which contains sum = 8.
Example:
Note:
You may assume that the matrix does not change.
There are many calls to sumRegion function.
You may assume that row1 ≤ row2 and col1 ≤ col2.
题解:
二维的情况和一维的思路类似,就是求一个递推式然后把和预处理出来,然后O(1)查询。
一维的递推式是:s[i]=s[i-1]+a[i];
二维的由画图可知:s[i][j]=a[i][j]+s[i-1][j]+s[i][j-1]-s[i-1][j-1];
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) -> 8 sumRegion(1, 1, 2, 2) -> 11 sumRegion(1, 2, 2, 4) -> 12
Note:
You may assume that the matrix does not change.
There are many calls to sumRegion function.
You may assume that row1 ≤ row2 and col1 ≤ col2.
题解:
二维的情况和一维的思路类似,就是求一个递推式然后把和预处理出来,然后O(1)查询。
一维的递推式是:s[i]=s[i-1]+a[i];
二维的由画图可知:s[i][j]=a[i][j]+s[i-1][j]+s[i][j-1]-s[i-1][j-1];
class NumMatrix { public: NumMatrix(vector<vector<int>> &matrix) { n=matrix.size(); m=n>0?matrix[0].size():0; s=vector<vector<int>>(n+1,vector<int>(m+1,0)); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ s[i][j]=matrix[i-1][j-1]+s[i-1][j]+s[i][j-1]-s[i-1][j-1]; } } } int sumRegion(int row1, int col1, int row2, int col2) { return s[row2+1][col2+1]-s[row2+1][col1]-s[row1][col2+1]+s[row1][col1]; } private: int n,m; vector<vector<int> >s; }; // Your NumMatrix object will be instantiated and called as such: // NumMatrix numMatrix(matrix); // numMatrix.sumRegion(0, 1, 2, 3); // numMatrix.sumRegion(1, 2, 3, 4);
相关文章推荐
- DLUTOJ #1394 Magic Questions
- Sqlite 中query方法用法
- andriod bluetooth gatt 详细讲解
- UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释
- codeforces 450B B. Jzzhu and Sequences(矩阵快速幂)
- Scala进阶源码实战之五——List、Queue、Stack、Set、Map
- LINQ之路 8: 解释查询(Interpreted Queries)
- IDEA 自动生成 serialVersionUID
- vector去重--unique
- 欢迎使用CSDN-markdown编辑器
- hdu_5667_sequence
- GUI——AWT框架和容器,创建简单窗体
- UISrollView上嵌套UISlider
- javaweb中的request对象
- javaWeb中的request对象
- AndroidStudio导入项目一直卡在Building gradle project info最快速解决方案
- Iwfu-保存Fragment切换时的UI状态/保存销毁Activity后再次进入的视图状态
- 这次栽倒在sscanf函数上------ 看看错误的语句:int nRet = sscanf("xxx=yyy", "%s=%s", szKey, szValue);
- SOAPUI笔记2:SoapUI widow破解
- queue_01