
Given an array A of size N, modify the array in-place to create a prefix sum array where each element A[i] contains the sum of all elements from index 0 to i.
You must solve this problem without using any extra space (O(1) space complexity).
Input: A = 1, 2, 3, 4, 5
Output: 1, 3, 6, 10, 15
Explanation:
Input: A = 2, -1, 3, -4, 5
Output: 2, 1, 4, 0, 5
Explanation:
1 ≤ N ≤ 10^5-10^9 ≤ A[i] ≤ 10^9A[i] = A[i-1] + A[i] for all i from 1 to N-1Step 1: Keep A0 as is (it's already the prefix sum for index 0)
Step 2: Iterate from index 1 to N-1:
A[i] = A[i-1] + A[i]Step 3: Array is now modified to contain prefix sums
Input: A = [3, 1, 2, 4]
Initial state: [3, 1, 2, 4]
Step 1: i = 1
A[1] = A[0] + A[1] = 3 + 1 = 4
Array: [3, 4, 2, 4]
Step 2: i = 2
A[2] = A[1] + A[2] = 4 + 2 = 6
Array: [3, 4, 6, 4]
Step 3: i = 3
A[3] = A[2] + A[3] = 6 + 4 = 10
Array: [3, 4, 6, 10]
Final Output: [3, 4, 6, 10]
Approach: Create a new array and compute each prefix sum from scratch.
Algorithm:
prefix of size NTime Complexity: O(N²) - Nested loops Space Complexity: O(N) - Extra array needed
Why it's not optimal:
Original Array: [3, 1, 2, 4]
↓
Step 1 (i=1): [3, 4, 2, 4]
↑-----|
Step 2 (i=2): [3, 4, 6, 4]
↑-----|
Step 3 (i=3): [3, 4, 6, 10]
↑-----|
Prefix Sum Result: [3, 4, 6, 10]
Formula at each step: A[i] = A[i-1] + A[i]
Time: O(N), Space: O(1)
function inplacePrefixSum(A) {
for (let i = 1; i < A.length; i++) {
A[i] = A[i-1] + A[i];
}
return A;
}
Pros: Minimal space, simple implementation Cons: Destroys original array
Time: O(N), Space: O(N)
function prefixSumWithExtraSpace(A) {
const prefix = [A[0]];
for (let i = 1; i < A.length; i++) {
prefix[i] = prefix[i-1] + A[i];
}
return prefix;
}
Pros: Preserves original array Cons: Uses O(N) extra space
Time: O(N), Space: O(N)
function prefixSumFunctional(A) {
return A.reduce((acc, curr) => {
acc.push((acc[acc.length-1] || 0) + curr);
return acc;
}, []);
}
Pros: Declarative, clean code Cons: Less efficient, uses extra space
function inplacePrefixSum(A) {
const N = A.length;
// Start from index 1 since A[0] is already its own prefix sum
for (let i = 1; i < N; i++) {
A[i] = A[i-1] + A[i];
}
return A;
}
// Example usage:
const arr1 = [1, 2, 3, 4, 5];
console.log(inplacePrefixSum(arr1)); // [1, 3, 6, 10, 15]
const arr2 = [2, -1, 3, -4, 5];
console.log(inplacePrefixSum(arr2)); // [2, 1, 4, 0, 5]

I'm Rahul, Sr. Software Engineer (SDE II) and passionate content creator. Sharing my expertise in software development to assist learners.
More about me