【动态规划】Leetcode编程题解:303. Range Sum Query

来源:互联网 发布:卡巴1217淘宝 编辑:程序博客网 时间:2024/06/16 06:43

题目:Given an integer array nums, find the sum of the elements between indicesi and j (ij), inclusive.

样例:

Given nums = [-2, 0, 3, -5, 2, -1]

sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3

提示:

  1. You may assume that the array does not change.
  2. There are many calls to sumRange function.

这道题目在数组较小的情况下可以直接将数组中的第i项加到第j项,但是如果数组规模较大,时间就会线性增加,所以可以定义一个数组,每个位置存储的是该位置之前所有的数之和,那么时间复杂度就可以降到常数级。

代码如下:

class NumArray {public:    NumArray(vector<int> nums) {        number.push_back(0);        for(int i = 0; i < nums.size(); i++) {            number.push_back(number.back() + nums[i]);        }    }    int sumRange(int i, int j) {        return number[j+1] - number[i];    }private:    vector<int> number;    };

0 0