[LeetCode] Range Sum Query - Immutable
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<int> &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<int> 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)