-
Notifications
You must be signed in to change notification settings - Fork 4.9k
/
rangeSumQuery-Immutable.cpp
52 lines (48 loc) · 1.48 KB
/
rangeSumQuery-Immutable.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// Source : https://leetcode.com/problems/range-sum-query-immutable/
// Author : Calinescu Valentin, Hao Chen
// Date : 2015-11-10
/***************************************************************************************
*
* 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.
*
***************************************************************************************/
class NumArray {
/*
* Solution
* =========
*
* The sum of all the elements starting from position 0 to position i is stored in
* sums[i]. This way we can reconstruct the sum from position i to position j by
* subtracting sums[i - 1] from sums[j], leaving us with the sum of the desired elements.
*
* Note: we can add a dummy sum at then beginning to simplify the code
*
*/
private:
int size;
vector <long long> sums;
public:
NumArray(vector<int> &nums): size(nums.size()), sums(size+1, 0) {
for(int i=0; i<size; i++) {
sums[i+1] = sums[i] + nums[i];
}
}
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);