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

2022-06-21 03:24:12 字數 2055 閱讀 6646

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...