Question 1: Range Sum query 1D

Method 1空间O(1)暴力

Method 2 PerfixSum(off by 1 VS not off by 1)

Index 0 1 2 3 4

Value 0 3 5 7 9

注意你要先定义prefixSum

/*
off by 1
prefixSum[I] represents the sum from [0,i-1] 
prefixSum[I] = prefixSum[I-1] + array[I-1]
partSum[I, j] = prefixSum[j+ 1] - prefixSum[I]

not off by 1
prefixSum[I] represents the sum from [0, I ]
prefixSum[0] = array[0]
prefixSum[I] = prefixSum[I-1] + array[I]
partSum[I, j] = prefixSum[j] - prefixSum[I- 1]
*/


class NumArray {
    int[] prefix;
    public NumArray(int[] nums) {
        this.prefix = new int[nums.length + 1];
        for (int i = 1; i < this.prefix.length; i++) {
            this.prefix[i] = this.prefix[i- 1] + nums[i- 1]; 
        }
    }
    pubic int sumRange(int left, int right) {
        return this.prefix[right + 1] - this.prefix[left];
    }
}



class NumArray {
    int[] prefix;
    public NumArray(int[] nums) {
        this.prefix = new int[nums.length];
        for (int i = 0; i < this.prefix.length; i++) {
            if (i = 0) {
                this.prefix[0] = nums[0];
            }
            this.prefix[i] = this.prefix[i- 1] + nums[i- 1]; 
        }
    }
    pubic int sumRange(int left, int right) {
        if (left == 0) {
            return this.prefix[right];
        }
        return this.prefix[right] - this.prefix[left - 1];
    }
}

Last updated