【Lintcode】943. Range Sum Query - Immutable

題目地址:

https://www.lintcode.com/problem/range-sum-query-immutable/description

給定一個數組,要求實現一個數據結構,可以進行給定區間[i,j][i,j]求區間和的操作。

用前綴和。設原數組是AA,則另開一個數組SS,其長度比AA要多11,並且S[i]S[i]表示AA的前ii個數字的和(前00個數字的和就是00,也就是S[0]=0S[0]=0),所以S[i]=j=0i1A[j]S[i]=\sum_{j=0}^{i-1}A[j]所以對於區間[i,j][i,j]來說,區間和就是第i+1i+1個數到第j+1j+1個數的和,也就是S[j+1]S[i]S[j+1]-S[i]。代碼如下:

public class NumArray {
    
    private int[] prefixSum;
    
    public NumArray(int[] nums) {
        prefixSum = new int[nums.length + 1];
        for (int i = 0; i < nums.length; i++) {
            prefixSum[i + 1] = prefixSum[i] + nums[i];
        }
    }
    
    public int sumRange(int i, int j) {
        return prefixSum[j + 1] - prefixSum[i];
    }
}

預處理時間複雜度O(n)O(n),區間和操作時間複雜度O(1)O(1),空間O(n)O(n)

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