题目:
Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.
Example:
Given nums = [-2, 0, 3, -5, 2, -1] sumRange(0, 2) -> 1 sumRange(2, 5) -> -1 sumRange(0, 5) -> -3
Note:
- You may assume that the array does not change.
- There are many calls to sumRange function.
题意:
给定一个整数数组nums,找到给定下标i到j(i<=j)之间所有元素的和,包含边界。
note:
1、可以假定数组不会改变;
2、sumRange函数会大量的调用;
思路:
题目要求非常简单,只需要遍历累加i到j下标处的值即可。但是如果函数调用过多,会TLE(超时)。所以不能到需要使用的时候再去做遍历累加,可以维护一个数组,数组下标i处存储[0,i]的所有元素的累加和,当需要求i到j之间的累加和时,直接相减即可。即sumRange(i, j) = sum(j) - sum(i);
代码:C++版:28ms
class NumArray { private: vector<int> sums; public: NumArray(vector<int> &nums) { sums.push_back(0); for (auto n : nums) { sums.push_back(sums.back() + n); } } int sumRange(int i, int j) { return sums[j+1] - sums[i]; } }; // Your NumArray object will be instantiated and called as such: // NumArray numArray(nums); // numArray.sumRange(0, 1); // numArray.sumRange(1, 2);