力扣_303_数组不可变(简单)

给定一个整数数组  nums,求出数组从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点。

实现 NumArray 类:

NumArray(int[] nums) 使用数组 nums 初始化对象
int sumRange(int i, int j) 返回数组 nums 从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点(也就是 sum(nums[i], nums[i + 1], ... , nums[j]))

 

 

说实话,看了几遍题,也没看懂啥意思,一方面怀疑自己是不是智商有问题,一方面又怀疑这题目是不是汉语....

后来背着自己的良心看了答案,答案真香....

这个题目的意思是在于多次调用sumRange方法,所以在sumRange方法中循坏得到结果是不可取的...

class NumArray {
    int[] sums;

    public NumArray(int[] nums) {
        int n = nums.length;
        sums = new int[n + 1];
        for (int i = 0; i < n; i++) {
            sums[i + 1] = sums[i] + nums[i];
        }
    }
    
    public int sumRange(int i, int j) {
        return sums[j + 1] - sums[i];
    }
}

注:sums[nums.length + 1 ]数组的长度设置成这样,是为了防止调用sumRange(0,0)这种边界情况。

 

posted @ 2021-03-03 10:13  '--'  阅读(48)  评论(0)    收藏  举报