这是我参与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
[题目链接]
[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]