【日更刷题】1480. 一维数组的动态和

54 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情

一、题目描述:

1480. 一维数组的动态和 - 力扣(LeetCode)

给你一个数组 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

二、思路分析:

我原本是想创建一个变量用来储存每次的和的值

然后每次循环这个值进行改变,把它每次的变化用一个数组储存起来,最后返回这个数组。

后面发现可以用原本的传入数组来记录这个值的改变

初始第一个的数组的值不会发生变动,所以我们的下标i从1开始

需要循环进行n-1次,每次i的位置的值用来存储i位置原本的值与i-1位置的值的和

每循环一次,原始数组更新一次数据

循环进行完以后,这个数组里面的值就是对应原始数组动态和的值,将该数组返回即可。

可以很容易知道这个公式: sum[i] = nums[0]+...+nums[i]

仔细观察这个公式,我们可以发现当 i + 1,新公式为: sum[i + 1] = nums[0]+...+nums[i + 1]

我们可以发现,sum[i + 1]的公式中,sum[i]的计算是重复的,我们可以将该公式再简化为如下:

sum[i + 1] = sum[i] + nums[i + 1]

根据该公式,可以很简单的写出我们的解题代码,并且不需要耗费任何额外空间,它们很明显是可以直接在原数组上原地操作的。

三、AC 代码:

class Solution {

    public int[] runningSum(int[] nums) {
        if(nums.length == 1) {
            return nums;
        }
        for (int i = 1; i < nums.length; i++) {
            nums[i] += nums[i - 1];
        }
        return nums;
    }

}