The idea is fairly straightforward: create an array accu
that stores the accumulated sum fornums
such that accu[i] = nums[0] + ... + nums[i]
in the initializer of NumArray
. Then just return accu[j + 1] - accu[i]
in sumRange
. You may try the example in the problem statement to convince yourself of this idea.
The code is as follows.
C++
1 class NumArray { 2 public: 3 NumArray(vector &nums) { 4 accu.push_back(0); 5 for (int num : nums) 6 accu.push_back(accu.back() + num); 7 } 8 9 int sumRange(int i, int j) {10 return accu[j + 1] - accu[i];11 }12 private:13 vector accu;14 };15 16 17 // Your NumArray object will be instantiated and called as such:18 // NumArray numArray(nums);19 // numArray.sumRange(0, 1);20 // numArray.sumRange(1, 2);
Python
class NumArray(object): def __init__(self, nums): """ initialize your data structure here. :type nums: List[int] """ self.accu = [0] for num in nums: self.accu += self.accu[-1] + num, def sumRange(self, i, j): """ sum of elements nums[i..j], inclusive. :type i: int :type j: int :rtype: int """ return self.accu[j + 1] - self.accu[i]# Your NumArray object will be instantiated and called as such:# numArray = NumArray(nums)# numArray.sumRange(0, 1)# numArray.sumRange(1, 2)