题目:
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.
// Your NumArray object will be instantiated and called as such:
// NumArray numArray(nums);
// numArray.sumRange(0, 1);
// numArray.sumRange(1, 2);
思路:
自底向上得到所有sumRange(0, i)的解,保存在public成员solution中; Θ(n)
sumRange(i, j) = sumRange(0, j) - sumRange(0, i - 1);
代码:C++
class NumArray { public: NumArray(vector<int> &nums) { num = nums; if (num.size() > 0) { solution.push_back(num[0]); for (int i = 1; i <= num.size() - 1; i++) { int index = solution[i - 1] + num[i]; solution.push_back(index); } } } int sumRange(int i, int j) { if (i < 0 || j >= num.size()) return 0; if (i == 0) return solution[j]; else return solution[j] - solution[i - 1]; } vector<int> solution; private: vector<int> num; };
浙公网安备 33010602011771号