【Leetcode】Range Sum Query 2D - Immutable
2016-05-31 00:45
429 查看
题目链接:https://leetcode.com/problems/range-sum-query-2d-immutable/
题目:
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.
思路:
简单。。。
算法:
题目:
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:
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.
思路:
简单。。。
算法:
int s[][]; public NumMatrix(int[][] matrix) { if (matrix.length != 0) { s = new int[matrix.length][matrix[0].length]; s[0][0] = matrix[0][0]; for (int i = 1; i < matrix.length; i++) { s[i][0] = s[i - 1][0] + matrix[i][0]; } for (int j = 1; j < matrix[0].length; j++) { s[0][j] = s[0][j - 1] + matrix[0][j]; } for (int i = 1; i < matrix.length; i++) { for (int j = 1; j < matrix[0].length; j++) { s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + matrix[i][j]; } } } } public int sumRegion(int row1, int col1, int row2, int col2) { int s2 = 0, s3 = 0, s4 = 0; if (col1 - 1 >= 0) s2 = s[row2][col1 - 1]; if (row1 - 1 >= 0) s3 = s[row1 - 1][col2]; if (row1 - 1 >= 0 && col1 - 1 >= 0) s4 = s[row1 - 1][col1 - 1]; return s[row2][col2] - s2 - s3 + s4; }
相关文章推荐
- easyUI入门的学习
- IOS--UINavigationBar修改背景色
- 关于Intellij IDEA菜单项中Compile、Make和Build的区别
- String,StringBuffer与StringBuilder的区别??
- EasyUI combobox 焦点处理
- 从字节码角度看String、StringBuffer、StringBuilder的不同
- UITableView-微博-cell等高的实现
- UITableView-微博-cell非等高的实现2
- UITableView 协议
- Key-Value Coding
- Key-Value Observing
- 【欧拉函数表】POJ2478-Farey Sequence
- OC中限制UITextView的最大字数的实现
- Creational Patterns Part 4/5: Builder Pattern
- 拖动UIScrollView时的delegate调用调用顺序
- UINavigationController和UITabBarController合用
- 导入错误,Gradle version 2.10 is required. Current version is 2.8
- PrimusUI
- UIView属性的动画
- APUE(3)---文件I/O (1)