给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。
请返回 nums 的动态和。
输入:nums = [1,2,3,4] 输出:[1,3,6,10] 解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。
我的回答:
class Solution {
public:
vector<int> runningSum(vector<int>& nums) {
vector<int> nums1;
nums1[0] = nums[0];
for (int i{1}; i <= nums.size(); ++i)
{
nums1[i] = nums1[i-1] + nums[i];
}
return nums1;
}
};
但是,这段代码有一些错误,可能导致运行时错误或不正确的结果。
错误一:没有为新的向量nums1分配足够的空间。只是声明了一个空的向量,然后试图访问它的元素。这会导致数组越界的异常。应该使用vector<int> nums1(nums.size())
来创建一个和nums一样大小的向量,或者使用nums1.push_back()
来动态添加元素。
错误二:循环条件有误。应该使用i < nums.size()
而不是i <= nums.size()
,否则会再次访问超出范围的元素。注意,向量的索引从0开始,所以最后一个元素的索引是nums.size() - 1
。
错误三:没有处理空向量的情况。如果nums为空,那么代码会试图访问不存在的元素,导致异常。你应该在循环之前检查nums是否为空,如果是,就直接返回一个空向量。
修改之后:
class Solution {
public:
vector<int> runningSum(vector<int>& nums) {
// 检查空向量
if (nums.empty()) return {};
// 创建新向量
vector<int> nums1(nums.size());
// 初始化第一个元素
nums1[0] = nums[0];
// 循环计算累加和
for (int i = 1; i < nums.size(); ++i)
{
nums1[i] = nums1[i-1] + nums[i];
}
// 返回新向量
return nums1;
}
};
示例代码:
class Solution {
public:
vector<int> runningSum(vector<int>& nums) {
vector<int> ret;
int x=0;
for(int i=0;i<nums.size();i++){
x+=nums[i];
ret.push_back(x);
}
return ret;
}
};
原地修改:
class Solution {
public:
vector<int> runningSum(vector<int>& nums) {
int n = nums.size();
for (int i = 1; i < n; i++) {
nums[i] += nums[i - 1];
}
return nums;
}
};