【Liz的算法日记】01 一维数组的动态和

29 阅读1分钟

题目

LeetCode 1048.

给你一个数组 nums ,数组「动态和」的计算公式为:

runningSum[i] = sum(nums[0]…nums[i])

请返回 nums 的动态和。

前置知识

  • sum 代表 总和 的含义
  • 数组定义
  • 数组下标
  • for 循环定义

思路

根据题目中给出的计算公式可以得出一个递推式,如下:

runningSum[i]={nums[0]i=0num[i]+nums[i1]i>0runningSum[i] = \begin{cases} nums[0] & i = 0 \\ num[i] + nums[i-1] & i > 0 \\ \end{cases}

由此可以知道,nums 数组的动态和第1个元素nums 数组第1个元素一样,其后元素都为当前元素加上前一个元素。

因此可以使用 for 循环从数组第2个元素开始遍历 nums 数组,直接用 nums 数组当前元素 nums[i] 加上前一个元素 nums[i-1] 并赋值给 nums[i],遍历结束后,nums 数组即为题目中要求返回的动态和。

题解代码

func runningSum(nums []int) []int {
    // 时间复杂度:O(n)
    // 空间复杂度:O(1)

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

    return nums
}