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

2021-01-28 04:17

阅读:699

标签:复杂   inf   复杂度   none   display   i++   click   意思   不可   

题目描述:

技术图片

 

分析:虽然是求区间和,但数组是不可变的,不可变 意思是 不涉及线段树更新操作。因此可以不使用线段树这种复杂的数据结构,对于该题不使用线段树效果更好,初始化是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[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. 区域和检索 - 数组可修改

 

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

标签:复杂   inf   复杂度   none   display   i++   click   意思   不可   

原文地址:https://www.cnblogs.com/HuangYJ/p/12839039.html


评论


亲,登录后才可以留言!