LeetCode 1480: Running Sum of 1d Array (Prefix Accumulation In-Place)
LeetCode 1480Prefix SumArrayToday we solve LeetCode 1480 - Running Sum of 1d Array. This is a classic prefix accumulation problem and a perfect warm-up for many prefix-sum interview questions.
Source: https://leetcode.com/problems/running-sum-of-1d-array/
English
Problem Summary
Given an integer array nums, return an array runningSum where runningSum[i] equals the sum of nums[0..i].
Key Insight
Each position only needs the previous prefix value:
runningSum[0] = nums[0]runningSum[i] = runningSum[i-1] + nums[i]
If modifying input is allowed, we can do this directly in nums to save extra space.
Optimal Algorithm
Iterate from index 1 to n-1, and keep accumulating into the current cell.
Complexity Analysis
Time: O(n).
Space: O(1) extra space (in-place).
Reference Implementations (Java / Go / C++ / Python / JavaScript)
class Solution {
public int[] runningSum(int[] nums) {
for (int i = 1; i < nums.length; i++) {
nums[i] += nums[i - 1];
}
return nums;
}
}func runningSum(nums []int) []int {
for i := 1; i < len(nums); i++ {
nums[i] += nums[i-1]
}
return nums
}class Solution {
public:
vector runningSum(vector& nums) {
for (int i = 1; i < (int)nums.size(); i++) {
nums[i] += nums[i - 1];
}
return nums;
}
}; class Solution:
def runningSum(self, nums: list[int]) -> list[int]:
for i in range(1, len(nums)):
nums[i] += nums[i - 1]
return numsvar runningSum = function(nums) {
for (let i = 1; i < nums.length; i++) {
nums[i] += nums[i - 1];
}
return nums;
};中文
题目概述
给定整数数组 nums,返回数组 runningSum,其中 runningSum[i] 等于 nums[0..i] 的累计和。
核心思路
当前位置的前缀和只依赖前一个位置:
runningSum[0] = nums[0]runningSum[i] = runningSum[i-1] + nums[i]
因此可以直接在原数组上原地更新,空间更省。
最优算法
从下标 1 开始线性扫描,把前一个位置的累计值加到当前位置。
复杂度分析
时间复杂度:O(n)。
额外空间复杂度:O(1)(原地)。
多语言参考实现(Java / Go / C++ / Python / JavaScript)
class Solution {
public int[] runningSum(int[] nums) {
for (int i = 1; i < nums.length; i++) {
nums[i] += nums[i - 1];
}
return nums;
}
}func runningSum(nums []int) []int {
for i := 1; i < len(nums); i++ {
nums[i] += nums[i-1]
}
return nums
}class Solution {
public:
vector runningSum(vector& nums) {
for (int i = 1; i < (int)nums.size(); i++) {
nums[i] += nums[i - 1];
}
return nums;
}
}; class Solution:
def runningSum(self, nums: list[int]) -> list[int]:
for i in range(1, len(nums)):
nums[i] += nums[i - 1]
return numsvar runningSum = function(nums) {
for (let i = 1; i < nums.length; i++) {
nums[i] += nums[i - 1];
}
return nums;
};
Comments