LeetCode 303. Range Sum Query - Immutable(区域和检索-数组不可变)

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

示例:

给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()

sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3
说明:

你可以假设数组不可变。
会多次调用 sumRange 方法。
class NumArray {

    int[] dp;

    public NumArray(int[] nums) {
        //dp[i]表示:0-i下标处所有元素的和(包含0和i下标处,共i+1个元素和)
        dp = new int[nums.length];
        
        //有一个这样测试用例:[[[]]]
        if(nums.length == 0) {
            return;
        }

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

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

发布了581 篇原创文章 · 获赞 97 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/gx17864373822/article/details/104947783