leetcode每日一题系列一维数组的动态和

530 阅读2分钟

这是我参与8月更文挑战的第28天,活动详情查看:8月更文挑战

leetcode-1480-一维数组的动态和

[博客链接]

菜🐔的学习之路

掘金首页

[题目描述]

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

[题目链接]

leetcode题目链接

[github地址]

代码链接

[思路介绍]

思路一:

  • 这道题实在是简单地过分了,做错都难
  • 就正常循环求值即可
  • 如果不想要额外控件变量,就本地存储即可
class Solution {
    public int[] runningSum(int[] nums) {
        int n = nums.length;
        int[] ans = new int[n];
        for (int i = 0, s = 0; i < n; i++) {
            ans[i] = s = s + nums[i];
        }
        return ans;
    }
}
  • 时间复杂度O(n)
  • 空间复杂度O(N)

思路二:原地置换

  • 空间复杂度为O(1)的逻辑就是本地置换
class Solution {
    public int[] runningSum(int[] nums) {
        for (int i = 1; i < nums.length; i++) {
            nums[i] += nums[i - 1];
        }
        
        return nums;
    }
}
  • 时间复杂度O(n)
  • 空间复杂度O(1)

  • 说句题外话,这道题的本质应该是前缀和的基础求解过程
  • 通过这种数组求前n项和的方案求其中某个子数组的和
  • 这道题出的实在是太简单没什么意义
  • 不如做几道前缀和的题去看看Si-Sj = a[i] + ... +a[j]