这题比较简单,其中numarray的函数时把传进来的Nums转换为类内部的数组,在用sumrange计算i-j的前缀和。
这里一种是利用dp,直接计算并存储nums数组的前缀和,调用intrange时直接计算即可
另一种就是暴力解法了。
两者运行时间差别如下
//此方法是用前缀和
//_sum数组存储nums的前缀和
class NumArray {
private:
vector<int> _sum;
public:
NumArray(vector<int>& nums) {
_sum.resize(nums.size() + 1);
for (int i = 0; i < nums.size(); i++) {
_sum[i + 1] = _sum[i] + nums[i];
}
}
int sumRange(int i, int j) {
return _sum[j + 1] - _sum[i];
}
};
//此方法直接暴力求解
//用时392ms
class NumArray {
private:
vector<int> _nums;
public:
NumArray(vector<int>& nums) {
_nums = nums;
}
int sumRange(int i, int j) {
int sum = 0;
for (int index = i; index <= j; index++) {
sum += _nums[index];
}
return sum;
}
};