一、题目描述:
输入:
["NumArray", "sumRange", "sumRange", "sumRange"] [[[-2, 0, 3, -5, 2, -1]], [0, 2], [2, 5], [0, 5]]
输出: [null, 1, -1, -3]
解释:
NumArray numArray = new NumArray([-2, 0, 3, -5, 2, -1]);
numArray.sumRange(0, 2); // return 1 ((-2) + 0 + 3)
numArray.sumRange(2, 5); // return -1 (3 + (-5) + 2 + (-1))
numArray.sumRange(0, 5); // return -3 ((-2) + 0 + 3 + (-5) + 2 + (-1))
二、思路分析:
这道题比较坑的是标签是动态规划,虽然硬要说动态规划的话可以写状态转移方程
但其实前缀和都已经贴脸上了,而且由于是简单题,也没什么难点直接走模板就可以了。
需要注意的是前缀和不要直接使用类似这个方程
因为这样的话在求值的时候需要
但这样的话在i等于0的时候会出现bug 因此需要将dp[0]置为0,然后依次顺延
三、AC 代码:
class NumArray {
public:
vector<int> arr;
NumArray(vector<int>& nums) {
int ret = 0;
for(int i = 0; i < nums.size(); i++){
arr.push_back(ret);
ret += nums[i];
}
arr.push_back(ret);
}
int sumRange(int i, int j) {
return arr[j + 1] - arr[i];
}
};
四、总结:
这破简单题,一点动态规划的精妙之处都没有体现,决定再找一道题写个文章。
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情