码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-05-07 00:46:03      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:复杂   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.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. 区域和检索 - 数组可修改

 

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

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

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!