g0301_0400.s0304_range_sum_query_2d_immutable.NumMatrix Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0301_0400.s0304_range_sum_query_2d_immutable;
// #Medium #Array #Matrix #Design #Prefix_Sum #Dynamic_Programming_I_Day_14
// #Programming_Skills_II_Day_13 #Udemy_2D_Arrays/Matrix
// #2022_07_07_Time_153_ms_(87.51%)_Space_133.5_MB_(19.29%)
/**
* 304 - Range Sum Query 2D - Immutable\.
*
* Medium
*
* Given a 2D matrix `matrix`, handle multiple queries of the following type:
*
* * Calculate the **sum** of the elements of `matrix` inside the rectangle defined by its **upper left corner** `(row1, col1)` and **lower right corner** `(row2, col2)`.
*
* Implement the NumMatrix class:
*
* * `NumMatrix(int[][] matrix)` Initializes the object with the integer matrix `matrix`.
* * `int sumRegion(int row1, int col1, int row2, int col2)` Returns the **sum** of the elements of `matrix` inside the rectangle defined by its **upper left corner** `(row1, col1)` and **lower right corner** `(row2, col2)`.
*
* **Example 1:**
*
* ![](https://assets.leetcode.com/uploads/2021/03/14/sum-grid.jpg)
*
* **Input**
*
* ["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]]
*
* **Output:** [null, 8, 11, 12]
*
* **Explanation:**
*
* 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 (i.e sum of the red rectangle)
* numMatrix.sumRegion(1, 1, 2, 2); // return 11 (i.e sum of the green rectangle)
* numMatrix.sumRegion(1, 2, 2, 4); // return 12 (i.e sum of the blue rectangle)
*
* **Constraints:**
*
* * `m == matrix.length`
* * `n == matrix[i].length`
* * `1 <= m, n <= 200`
* * -105 <= matrix[i][j] <= 105
* * `0 <= row1 <= row2 < m`
* * `0 <= col1 <= col2 < n`
* * At most 104
calls will be made to `sumRegion`.
**/
public class NumMatrix {
private int[][] tot;
public NumMatrix(int[][] matrix) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return;
}
// The dimensions of this tot matrix is actually 1 bigger than the given matrix, cool!
tot = new int[matrix.length + 1][matrix[0].length + 1];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
tot[i + 1][j + 1] = matrix[i][j] + tot[i + 1][j] + tot[i][j + 1] - tot[i][j];
}
}
}
public int sumRegion(int row1, int col1, int row2, int col2) {
return tot[row2 + 1][col2 + 1]
- tot[row2 + 1][col1]
- tot[row1][col2 + 1]
+ tot[row1][col1];
}
}
/*
* Your NumMatrix object will be instantiated and called as such:
* NumMatrix obj = new NumMatrix(matrix);
* int param_1 = obj.sumRegion(row1,col1,row2,col2);
*/
© 2015 - 2025 Weber Informatics LLC | Privacy Policy