[LeetCode]303. Range Sum Query - Immutable
题目描述
思路
开始的思路:存数组,将对应的区间内的数字相加
优化:
对于每一位,存入的是从第0位到当前位的和
返回的时候返回 [j] - [i - 1]即可
代码
开始的思路
class NumArray {
public:
vector<int> nums;
NumArray(vector<int> nums) {
for (int p : nums)
this->nums.push_back(p);
}
int sumRange(int i, int j) {
int sum = 0;
for (; i <= j; ++i)
sum += nums[i];
return sum;
}
};
优化后
#include <iostream>
#include <vector>
using namespace std;
class NumArray {
public:
vector<int> nums;
NumArray(vector<int> nums) {
if (nums.size()) {
this->nums.push_back(nums[0]);
for (int i = 1; i < nums.size(); ++i)
this->nums.push_back(nums[i] + this->nums[i - 1]);
}
}
int sumRange(int i, int j) {
if (i)
return nums[j] - nums[i - 1];
else
return nums[j];
}
};
int main() {
vector<int> nums = { -2, 0, 3, -5, 2, -1 };
NumArray s = NumArray(nums);
cout << s.sumRange(0, 2) << endl;
system("pause");
}