배열이 주어지고, (left, right) 인덱스를 가진 쿼리가 들어오면, left 부터 right까지의 합을 리턴하라.
Input
["NumArray", "sumRange", "sumRange", "sumRange"]
[[[-2, 0, 3, -5, 2, -1]], [0, 2], [2, 5], [0, 5]]
Output
[null, 1, -1, -3]
Explanation
NumArray numArray = new NumArray([-2, 0, 3, -5, 2, -1]);
numArray.sumRange(0, 2); // return (-2) + 0 + 3 = 1
numArray.sumRange(2, 5); // return 3 + (-5) + 2 + (-1) = -1
numArray.sumRange(0, 5); // return (-2) + 0 + 3 + (-5) + 2 + (-1) = -3
presum[right] - presum[left - 1]
이 됨. 0 1 2 3 4 5
^^^^^
2 ~ 4 까지의 합 -> presum[4] - presum[1]
class NumArray {
public:
unordered_map<int, int> presum;
NumArray(vector<int>& nums) {
int sum = 0;
for (int i = 0; i < nums.size(); i++) {
sum += nums[i];
presum[i] = sum;
}
}
int sumRange(int left, int right) {
if (left == 0)
return presum[right];
return presum[right] - presum[left - 1];
}
};
아주 유용한 정보네요!