【Leetcode】304. Range Sum Query 2D - Immutable

題目地址:

https://leetcode.com/problems/range-sum-query-2d-immutable/

給定一個二維矩陣AA,要求設計一個數據結構,可以實現查詢左上從(r1,c1)(r_1,c_1),右下到(r2,c2)(r_2,c_2)範圍內矩陣數字的和的操作。

思路是前綴和。令f[i][j]f[i][j]是原矩陣位於前ii行前jj列的所有數字的和,規定f[0][j]=f[i][0]=0f[0][j]=f[i][0]=0,那麼有f[i][j]=A[i][j]+f[i1][j]+f[i][j1]f[i1][j1]f[i][j]=A[i][j]+f[i-1][j]+f[i][j-1]-f[i-1][j-1]查詢的時候,利用前綴和做差即可。代碼如下:

public class NumMatrix {
    
    private int[][] prefixSum;
    
    public NumMatrix(int[][] matrix) {
        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
            return;
        }
        
        int n = matrix.length, m = matrix[0].length;
        prefixSum = new int[n + 1][m + 1];
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                prefixSum[i][j] = matrix[i - 1][j - 1] + prefixSum[i - 1][j] + prefixSum[i][j - 1] - prefixSum[i - 1][j - 1];
            }
        }
    }

	public int sumRegion(int row1, int col1, int row2, int col2) {
        return prefixSum[row2 + 1][col2 + 1] - prefixSum[row2 + 1][col1] - prefixSum[row1][col2 + 1] + prefixSum[row1][col1];
    }
}

初始化時空複雜度O(nm)O(nm),查詢時空複雜度O(1)O(1)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章