LeetCode303. 区域和检索 - 数组不可变

题目描述:

 

分析:虽然是求区间和,但数组是不可变的,不可变 意思是 不涉及线段树更新操作。因此可以不使用线段树这种复杂的数据结构,对于该题不使用线段树效果更好,初始化是O(n)的复杂度,以后每次调用只需要O(1)的复杂度。

// 不使用线段树的解决方案
class NumArray {

    private int[] sum; // sum[i]存储前i个元素和, sum[0] = 0                   
    public NumArray(int[] nums) {
        sum = new int[nums.length + 1]; // sum[i]存储nums[0....i-1]的和 
        sum[0] = 0;
        for(int i = 1; i <sum.length; i++){
            sum[i] = sum[i - 1] + nums[i - 1];
        }
    }
    
    public int sumRange(int i, int j) {
        return sum[j + 1] - sum[i]; // 0到j的和 减去 0到i-1的和,剩下的就是i到j的和
    }
}

/**
 * Your NumArray object will be instantiated and called as such:
 * NumArray obj = new NumArray(nums);
 * int param_1 = obj.sumRange(i,j);
 */
Solution 1

 

对比题目:LeetCode307. 区域和检索 - 数组可修改

 

posted @ 2020-05-06 23:46  不学无墅_NKer  阅读(107)  评论(0编辑  收藏  举报