304 二維區域和檢索 矩陣不可變

2021-10-20 19:14:23 字數 1459 閱讀 1368

題目描述

給定乙個二維矩陣,計算其子矩形範圍內元素的總和,該子矩陣的左上角為 (row1, col1) ,右下角為 (row2, col2) 。30

1425

6321

1201

5410

1710

305

上圖子矩陣左上角 (row1, col1) = (2, 1) ,右下角(row2, col2) = (4, 3),該子矩形內元素的總和為 8。

示例:

給定 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

解題思路

這題思路與303. 區域和檢索 - 陣列不可變類似。

同樣在nummatrix中建立乙個二維陣列用來儲存每行的總值,即sums[i][j + 1]為第i行,第j列的值。

然後在sumregion中迴圈row1到row2行,而每行的總和則為sums[row][col2 + 1] - sums[row][col1]。(row為某行)

最後sum即為總和。

/**

* @param matrix

*/var

nummatrix

=function

(matrix)

this

.sums =

newarray

(m).

fill(0

).map(()

=>

newarray

(n +1)

.fill(0

))for(

let i =

0; i < m; i ++)}

};/**

* @param row1

* @param col1

* @param row2

* @param col2

* @return

*/nummatrix.prototype.

sumregion

=function

(row1, col1, row2, col2)

return sum};

/** * your nummatrix object will be instantiated and called as such:

* var obj = new nummatrix(matrix)

* var param_1 = obj.sumregion(row1,col1,row2,col2)

*/

304 二維區域和檢索 矩陣不可變

給定乙個二維矩陣,計算其子矩形範圍內元素的總和,該子矩陣的左上角為 row1,col1 右下角為 row2,col2 上圖子矩陣左上角 row1,col1 2,1 右下角 row2,col2 4,3 該子矩形內元素的總和為 8。示例 給定 matrix 3,0,1,4,2 5,6,3,2,1 1,2...

304 二維區域和檢索 矩陣不可變

range sum query 2d 上圖子矩陣左上角 row1,col1 2,1 右下角 row2,col2 4,3 該子矩形內元素的總和為 8。示例 給定 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...

304 二維區域和檢索 矩陣不可變

leetcode所記錄的執行時間沒有包含 或者只是包含一次 初始化的時間 這是因為題目中已經說明了矩陣不可變,並且是多次呼叫sumregion 方法。1.暴力求解,1396ms,16.6mb class nummatrix def init self,matrix list list int sel...