前綴和-leetcode303

LeetCode上的題目 "303. 區域和檢索 - 數組不可變",是一個相對簡單的問題。

問題描述:

給定一個整數數組 nums,求出該數組從索引 i 到 j(i ≤ j)範圍內元素的總和,包含 i, j 兩點。

實現 NumArray 類:

NumArray(int[] nums) 用整數數組 nums 初始化對象
int sumRange(int i, int j) 返回數組 nums 從索引 i 到 j(i ≤ j)範圍內元素的總和,包含 i, j 兩點(也就是 sum(nums[i], nums[i + 1], ... , nums[j]))
示例:

輸入:
nums = [-2, 0, 3, -5, 2, -1]
sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3

思路:利用前綴和或者dp 記錄,從頭開始每一步的累計和,然後在需要的時候直接取值


//leetcode submit region begin(Prohibit modification and deletion)
class NumArray {

    private int[] prefixNum;

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

    public int sumRange(int left, int right) {
        if(left == 0){
            return prefixNum[right];
        }
        return prefixNum[right]-prefixNum[left-1];
    }
}

/**
 * Your NumArray object will be instantiated and called as such:
 * NumArray obj = new NumArray(nums);
 * int param_1 = obj.sumRange(left,right);
 */
//leetcode submit region end(Prohibit modification and deletion)

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