leetcode所記錄的執行時間沒有包含(或者只是包含一次)初始化的時間;這是因為題目中已經說明了矩陣不可變,並且是多次呼叫sumregion 方法。
1. 暴力求解,1396ms,16.6mb
class nummatrix:
def __init__(self, matrix: list[list[int]]):
self.matrix = matrix
def sumregion(self, row1: int, col1: int, row2: int, col2: int) -> int:
summiddle =
for i in range(row1, row2+1):
return sum(summiddle)
2. 呼叫numpy暴力求解,216ms,32.7mb
import numpy as np
class nummatrix:
def __init__(self, matrix: list[list[int]]):
self.matrix = np.array(matrix)
def sumregion(self, row1: int, col1: int, row2: int, col2: int) -> int:
return int(np.sum(self.matrix[row1:row2+1, col1:col2+1]))
3. 一維字首和,136ms,17.2mb
class nummatrix:
def __init__(self, matrix: list[list[int]]):
m, n = len(matrix), (len(matrix[0]) if matrix else 0)
self.sums = [[0] * (n + 1) for _ in range(m)]
_sums = self.sums
for i in range(m):
for j in range(n):
_sums[i][j + 1] = _sums[i][j] + matrix[i][j]
def sumregion(self, row1: int, col1: int, row2: int, col2: int) -> int:
_sums = self.sums
total = sum(_sums[i][col2 + 1] - _sums[i][col1] for i in range(row1, row2 + 1))
return total
4. 二維字首和,76ms,17.8mb
class nummatrix:
def __init__(self, matrix: list[list[int]]):
m, n = len(matrix), (len(matrix[0]) if matrix else 0)
self.sums = [[0] * (n + 1) for _ in range(m + 1)]
_sums = self.sums
for i in range(m):
for j in range(n):
_sums[i + 1][j + 1] = _sums[i][j + 1] + _sums[i + 1][j] - _sums[i][j] + matrix[i][j]
def sumregion(self, row1: int, col1: int, row2: int, col2: int) -> int:
_sums = self.sums
return _sums[row2 + 1][col2 + 1] - _sums[row1][col2 + 1] - _sums[row2 + 1][col1] + _sums[row1][col1]
5. 如果初始化和sumregion方法交替進行,執行時間 2<1<3<4 304 二維區域和檢索 矩陣不可變
題目描述 給定乙個二維矩陣,計算其子矩形範圍內元素的總和,該子矩陣的左上角為 row1,col1 右下角為 row2,col2 30 1425 6321 1201 5410 1710 305 上圖子矩陣左上角 row1,col1 2,1 右下角 row2,col2 4,3 該子矩形內元素的總和為 8...
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...