題目名稱
303. Range Sum Query - Immutable
描述
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:
1. You may assume that the array does not change.
2. There are many calls to sumRange function.
分析
在類中定義一個vector —— sum,用來保存從從第一個值到當前位置的累加和。sum.size()=nums.size()+1,sum[0]=0,sum[1]=sum[0]+nums[0],sum[2]=sum[1]+nums[1]…
C++代碼
class NumArray {
public:
NumArray(vector<int> &nums) :sum(nums.size()+1,0){
if(!nums.empty()){
for(int i=1;i<=nums.size();++i){
sum[i] = sum[i-1]+nums[i-1];
}
}
}
int sumRange(int i, int j) {
return sum[j+1]-sum[i];
}
private:
vector<int> sum;
};
測試用例
#include<iostream>
#include<vector>
using namespace std;
class NumArray {
public:
NumArray(vector<int> &nums) :sum(nums.size()+1,0){
if(!nums.empty()){
for(int i=1;i<=nums.size();++i){
sum[i] = sum[i-1]+nums[i-1];
}
}
for(int i=0;i<sum.size();++i){
cout<<sum[i]<<" ";
}
cout<<endl;
}
int sumRange(int i, int j) {
return sum[j+1]-sum[i];
}
private:
vector<int> sum;
};
int main() {
int a[] = {-2,0,3,-5,2,-1};
vector<int> test(a,a+6);
NumArray array(test);
cout<<"array.sumRange(0,2)="<<array.sumRange(0,2)<<endl;
cout<<"array.sumRange(2,5)="<<array.sumRange(2,5)<<endl;
cout<<"array.sumRange(0,5)"<<array.sumRange(0,5)<<endl;
return 0;
}