1480.一维数组的动态和
1480.1 题目
给你一个数组 nums
。数组「动态和」的计算公式为:runningSum[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]
提示:
1 <= nums.length <= 1000
-10^6 <= nums[i] <= 10^6
1480.2 题解
迭代累加
// 方法一:迭代累加
static int[] RunningSum1(int[] nums)
{
// 创建一个与原数组相同长度的数组用于存储动态和
int[] runningSum = new int[nums.Length];
// 用于累加当前元素的值
int sum = 0;
// 遍历原数组
for (int i = 0; i < nums.Length; i++)
{
// 累加当前元素的值到sum中
sum += nums[i];
// 将当前的sum值存入runningSum数组中对应的位置
runningSum[i] = sum;
}
// 返回计算得到的动态和数组
return runningSum;
}
原地修改
// 方法二:原地修改
static int[] RunningSum2(int[] nums)
{
// 遍历原数组,从第二个元素开始
for (int i = 1; i < nums.Length; i++)
{
// 将当前元素加上前一个元素的值,实现原地修改
nums[i] += nums[i - 1];
}
// 返回原数组,原地修改后的结果
return nums;
}
1480.3 代码
using System;
class Program
{
static void Main()
{
#region 题目
// 给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。
// 请返回 nums 的动态和。
// 示例见题目
#endregion
#region 测试
// 示例 1
int[] nums1 = { 1, 2, 3, 4 };
int[] result1_1 = RunningSum1(nums1);
Console.WriteLine($"示例1 方法1 输出:[{string.Join(", ", result1_1)}]");
int[] result1_2 = RunningSum2(nums1);
Console.WriteLine($"示例1 方法2 输出:[{string.Join(", ", result1_2)}]");
// 示例 2
int[] nums2 = { 1, 1, 1, 1, 1 };
int[] result2_1 = RunningSum1(nums2);
Console.WriteLine($"示例2 方法1 输出:[{string.Join(", ", result2_1)}]");
int[] result2_2 = RunningSum2(nums2);
Console.WriteLine($"示例2 方法2 输出:[{string.Join(", ", result2_2)}]");
// 示例 3
int[] nums3 = { 3, 1, 2, 10, 1 };
int[] result3_1 = RunningSum1(nums3);
Console.WriteLine($"示例3 方法1 输出:[{string.Join(", ", result3_1)}]");
int[] result3_2 = RunningSum2(nums3);
Console.WriteLine($"示例3 方法2 输出:[{string.Join(", ", result3_2)}]");
#endregion
}
#region 答案
// 方法一:迭代累加
static int[] RunningSum1(int[] nums)
{
// 创建一个与原数组相同长度的数组用于存储动态和
int[] runningSum = new int[nums.Length];
// 用于累加当前元素的值
int sum = 0;
// 遍历原数组
for (int i = 0; i < nums.Length; i++)
{
// 累加当前元素的值到sum中
sum += nums[i];
// 将当前的sum值存入runningSum数组中对应的位置
runningSum[i] = sum;
}
// 返回计算得到的动态和数组
return runningSum;
}
// 方法二:原地修改
static int[] RunningSum2(int[] nums)
{
// 遍历原数组,从第二个元素开始
for (int i = 1; i < nums.Length; i++)
{
// 将当前元素加上前一个元素的值,实现原地修改
nums[i] += nums[i - 1];
}
// 返回原数组,原地修改后的结果
return nums;
}
#endregion
}
1480.4 运行结果
示例1 方法1 输出:[1, 3, 6, 10]
示例1 方法2 输出:[1, 3, 6, 10]
示例2 方法1 输出:[1, 2, 3, 4, 5]
示例2 方法2 输出:[1, 2, 3, 4, 5]
示例3 方法1 输出:[3, 4, 6, 16, 17]
示例3 方法2 输出:[3, 4, 6, 16, 17]
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com