给你一个数组 nums 。数组「前缀和」的计算公式为: rtSum[i] = sum(nums[0] … nums[i]) 。请返回 nums 的前缀和示例 1 :输入: nums = [1,2,3,4]输出: [1,3,6,10]解释:前缀和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。示例 2 :输入: nums = [1,1,1,1,1]输出: [1,2,3,4,5]解释:前缀和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1] 。示例 3 :输入: nums = [3,1,2,10,1]输出: [3,4,6,16,17]
方法一:我们定义一个数组来储存前缀和,Sum[0]=num[0],后面Sum[x]=Sum[j]+num[x],x=j+1
该方法空间复杂度较大
代码如下
int main()
{
int nums[10];
int rtSum[10];
int sum[11] = { 0 };//这里我们要注意sum的边界,j=9时,x=10,此时sum数组长度如果为10,会产生越界
for (int i = 0; i <10; i++)
{
scanf("%d", &nums[i]);
}
int j = 0;
while ( j < 10 )
{
int x = j + 1;
sum[0] = nums[0];
sum[x] = sum[j] + nums[x];
rtSum[j] = sum[j];
printf("%d", rtSum[j]);
j++;
}
return 0;
}
方法二:利用原数组保存前缀和
代码如下
int* PreSum2(int* nums, int numsSize, int* returnSize) //O(n),O(1)
{
for(int i=1;i<numsSize;i++)
{
nums[i] += nums[i-1];
}
*returnSize = numsSize;
return nums;
}