【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)

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