前往
大廳
主題

LeetCode - 304. Range Sum Query 2D - Immutable 解題心得

Not In My Back Yard | 2021-06-04 00:00:01 | 巴幣 0 | 人氣 228

題目連結:


題目意譯:
給定一個二維矩陣 matrix,請處理多筆以下類型的詢問:
計算矩陣中以左上角 (row1, col1) 和右下角 (row2, col2) 定義之矩形內的元素和。

實作類別 NumMatrix:
NumMatrix(int[][] matrix) 初始化物件有著整數矩陣 matrix 。
int sumRegion(int row1, int col1, int row2, int col2) 回傳矩陣中以左上角 (row1, col1) 和右下角 (row2, col2) 定義之矩形內的元素和。

限制:
m == matrix.length
n == matrix[i].length
1 ≦ m 、 n ≦ 200
-10 ^ 5 ≦ matrix[i][j] ≦ 10 ^ 5
0 ≦ row1 ≦ row2 < m
0 ≦ col1 ≦ col2 < n
最多 10 ^ 4 次呼叫為 sumRegion 。



範例測資:
輸入
["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); // 回傳 8 (即紅色矩形部分之總和)
numMatrix.sumRegion(1, 1, 2, 2); // 回傳 11 (即綠色矩形部分之總和)
numMatrix.sumRegion(1, 2, 2, 4); // 回傳 12 (即藍色矩形部分之總和)


解題思維:
前綴和(Prefix Sums)的二維版本,可以參見一維版本(這題)以及三維版本(這題)。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作