题目:
Given an integer array nums, find the sum of the elements between indices i sand 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
翻译:
给定一个数组 nums,找到下标 i 到 j 之间(包括 i 和 j )的元素的和。
例子:
给定 nums = [-2, 0, 3, -5, 2, -1] sumRange(0, 2) -> 1 sumRange(2, 5) -> -1 sumRange(0, 5) -> -3
思路:
直接累加会报 TLE,但是观察到计算区间 i 和 j 内的和可以利用从下标 0 到 j 的和减去从下标 0 到 i 的和。直接看代码。
C++代码(Visual Studio 2017):
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
class NumArray {
private:
vector<int> dp;
public:
NumArray(vector<int> nums) {
dp = nums;
for (int i = 1; i < nums.size(); i++) {
dp[i] += dp[i - 1];
}
}
int sumRange(int i, int j) {
return i == 0 ? dp[j] : dp[j] - dp[i-1];
}
};
int main()
{
vector<int> nums = { -2,0,3,-5,2,-1 };
NumArray s(nums);
int result;
result = s.sumRange(0, 2);
cout << result;
return 0;
}