求一维数组的动态和:LeetCode第1480题

**题目:**给你一个数组 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]

**解析:**观察得出规律:第i项的值等于前i项之和(利用循环累加即可)

//方法1:开辟一个新的数组 (时间复杂度O(n),空间复杂度O(n))
int* PreSum1(int* nums, int len)
{
	if (len == 0)
	{
		return NULL;//作个判断,如果数组长度为0,直接结束程序
	}

	int* brr = (int*)(malloc)(len * sizeof(int));//开辟一个新数组
	brr[0] = nums[0];//数组第一个元素就等于它本身
	for (int i = 1; i < len; i++)
	{
		brr[i] = brr[i - 1] + nums[i];
	}
	return brr;
}

**//改进**
//方法2:利用原数组保存结果 (时间复杂度O(n),空间复杂度O(1))
int* PreSum2(int* nums, int len)
{
	if(len == 0)
	{
		return NULL;
	}

	for (int i = 1; i < len; i++)
	{
		nums[i] += nums[i - 1];
	}
	return nums;
}

你可能感兴趣的:(算法题,leetcode,算法,数组)