1次元配列の動的合計を見つける:LeetCode質問1480

**タイトル:**配列番号を指定します。配列「prefixsum」の計算式は次のとおりです。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;
}

おすすめ

転載: blog.csdn.net/weixin_45824959/article/details/112981391