1480.一维数组的动态和

  1. 1480.一维数组的动态和
    1. 1480.1 题目
    2. 1480.2 题解
      1. 迭代累加
      2. 原地修改
    3. 1480.3 代码
    4. 1480.4 运行结果

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

×

喜欢就点赞,疼爱就打赏