303+304. Range Sum Query && Range Sum Query 2D

題目:

Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.

Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper left corner (row1, col1) and lower right corner (row2, col2).

思路:

一個非常簡單的dp,即dp[i]表示數組從第1個到第i個的和。

還是一個非常簡單的dp,即dp[i][j]表示以(i,j)爲右下標的長方體內所有數字的和,然而這道題因爲null的情況好幾次都沒有通過!

程序:

public class NumArray {
    private int[] dp;

    public NumArray(int[] nums) {
        int len = nums.length;
        dp = new int[len+1];
        for(int i = 0; i < len; i++)
            dp[i+1] = dp[i] + nums[i];
    }

    public int sumRange(int i, int j) {
        return dp[j+1] - dp[i];
    }
}

public class NumMatrix {
    private int[][] dp;

    public NumMatrix(int[][] matrix) {
        if(matrix == null || matrix.length == 0) return; 
        int row = matrix.length;
        int col = matrix[0].length;
        dp = new int[row+1][col+1];
        for(int i = 0; i < row; i++)
            for(int j = 0; j < col; j++)
            {
                dp[i+1][j+1] = dp[i+1][j] + dp[i][j+1] - dp[i][j] + matrix[i][j];
            }
        
    }

    public int sumRegion(int row1, int col1, int row2, int col2) {

        return dp[row2+1][col2+1] + dp[row1][col1] - dp[row2+1][col1] - dp[row1][col2+1];
        
    }
}


發佈了51 篇原創文章 · 獲贊 23 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章