A Sum Array Puzzle

Last Updated : 22 May, 2026

Given an array arr[] of integers, change the array such that at every index it becomes the sum of all elements except itself. Simple way arr[i] should be arr[0] + arr[1] ... arr[i-1] + arr[i+1] ... arr[n-1].

Examples:

Input: arr[] = [3, 6, 4, 8, 9]
Output: 27, 24, 26, 22, 21
Explanation: For the sum array,
at i = 0 we have 6+4+8+9.
At i = 1, 3+4+8+9. At i=2,
We have 3+6+8+9.
At i = 3, we have 3+6+4+9.
At i = 4, we have 3+6+4+8.
So S is 27 24 26 22 21.

Input: arr[] = [0, 0, 1]
Output: 1, 1, 0
Explanation: For the sum array,
At i = 0 sum = 0 + 1 = 1,
At i = 1 sum = 0 + 1 = 1,
At i = 2 sum = 0 + 0 = 0.

Try It Yourself
redirect icon

[Naive Approach] Using Brute Force - O(n^2) Time O(n) Space

The idea is to traverse the array and for every index and calculate the sum of all elements except the current element. Store these sums in a temporary array and copy them back to the original array.

C++
#include <bits/stdc++.h>
using namespace std;

int sumArray(vector<int> &arr)
{
    int n = arr.size();

    vector<int> sum(n, 0);

    // Calculate sum for every index
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (i != j)
            {
                sum[i] += arr[j];
            }
        }
    }

    // Store answer back in original array
    for (int i = 0; i < n; i++)
    {
        arr[i] = sum[i];
    }

    return 0;
}

// Driver code
int main()
{

    vector<int> arr = {3, 6, 4, 8, 9};

    sumArray(arr);

    for (int x : arr)
    {
        cout << x << " ";
    }

    return 0;
}
Java
import java.util.*;

public class GfG {
    public static int sumArray(List<Integer> arr)
    {
        int n = arr.size();

        int[] sum = new int[n];

        // Calculate sum for every index
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (i != j) {
                    sum[i] += arr.get(j);
                }
            }
        }

        // Store answer back in original list
        for (int i = 0; i < n; i++) {
            arr.set(i, sum[i]);
        }

        return 0;
    }

    public static void main(String[] args)
    {
        List<Integer> arr = new ArrayList<>(
            Arrays.asList(3, 6, 4, 8, 9));

        sumArray(arr);

        for (int x : arr) {
            System.out.print(x + " ");
        }
    }
}
Python
def sumArray(arr):
    n = len(arr)

    sum = [0] * n

    # Calculate sum for every index
    for i in range(n):
        for j in range(n):
            if i != j:
                sum[i] += arr[j]

    # Store answer back in original array
    for i in range(n):
        arr[i] = sum[i]

    return 0


if __name__ == "__main__":
    arr = [3, 6, 4, 8, 9]

    sumArray(arr)

    for x in arr:
        print(x, end=' ')
C#
using System;

public class GfG
{
    public static int sumArray(int[] arr)
    {
        int n = arr.Length;

        int[] sum = new int[n];

        // Calculate sum for every index
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (i!= j)
                {
                    sum[i] += arr[j];
                }
            }
        }

        // Store answer back in original array
        for (int i = 0; i < n; i++)
        {
            arr[i] = sum[i];
        }

        return 0;
    }

    public static void Main()
    {
        int[] arr = {3, 6, 4, 8, 9};

        sumArray(arr);

        foreach (int x in arr)
        {
            Console.Write(x + " ");
        }
    }
}
JavaScript
function sumArray(arr) {
    let n = arr.length;

    let sum = Array(n).fill(0);

    // Calculate sum for every index
    for (let i = 0; i < n; i++) {
        for (let j = 0; j < n; j++) {
            if (i!= j) {
                sum[i] += arr[j];
            }
        }
    }

    // Store answer back in original array
    for (let i = 0; i < n; i++) {
        arr[i] = sum[i];
    }

    return 0;
}

// Driver code
let arr = [3, 6, 4, 8, 9];

sumArray(arr);

for (let x of arr) {
    process.stdout.write(x + ' ');
}

Output
27 24 26 22 21 

Time Complexity: O(n^2)
Auxiliary Space: O(n)

[Better Approach] Using Prefix Sum and Suffix Sum - O(n) Time O(n) Space

The idea is to precompute the sum of elements on the left and right side of every index using two arrays leftSum[] and rightSum[]. Then for each index, add both values to get the sum of all elements except the current element.

C++
#include <bits/stdc++.h>
using namespace std;

int sumArray(vector<int> &arr)
{
    int n = arr.size();

    vector<int> leftSum(n, 0);
    vector<int> rightSum(n, 0);

    // Store left side sums
    for (int i = 1; i < n; i++)
    {
        leftSum[i] = leftSum[i - 1] + arr[i - 1];
    }

    // Store right side sums
    for (int i = n - 2; i >= 0; i--)
    {
        rightSum[i] = rightSum[i + 1] + arr[i + 1];
    }

    // Final answer
    for (int i = 0; i < n; i++)
    {
        arr[i] = leftSum[i] + rightSum[i];
    }

    return 0;
}

// Driver code
int main()
{

    vector<int> arr = {3, 6, 4, 8, 9};

    sumArray(arr);

    for (int x : arr)
    {
        cout << x << " ";
    }

    return 0;
}
Java
import java.util.*;

public class GfG {
    
    public static void sumArray(List<Integer> arr) {
        int n = arr.size();

        int[] leftSum = new int[n];
        int[] rightSum = new int[n];

        // Store left side sums
        for (int i = 1; i < n; i++) {
            leftSum[i] = leftSum[i - 1] + arr.get(i - 1);
        }

        // Store right side sums
        for (int i = n - 2; i >= 0; i--) {
            rightSum[i] = rightSum[i + 1] + arr.get(i + 1);
        }

        // Final answer
        for (int i = 0; i < n; i++) {
            arr.set(i, leftSum[i] + rightSum[i]);
        }
    }

    public static void main(String[] args) {
        List<Integer> arr = new ArrayList<>(Arrays.asList(3, 6, 4, 8, 9));

        sumArray(arr);

        for (int x : arr) {
            System.out.print(x + " ");
        }
    }
}
Python
def sumArray(arr):
    n = len(arr)

    leftSum = [0] * n
    rightSum = [0] * n

    # Store left side sums
    for i in range(1, n):
        leftSum[i] = leftSum[i - 1] + arr[i - 1]

    # Store right side sums
    for i in range(n - 2, -1, -1):
        rightSum[i] = rightSum[i + 1] + arr[i + 1]

    # Final answer
    for i in range(n):
        arr[i] = leftSum[i] + rightSum[i]

    return 0

# Driver code
if __name__ == "__main__":
    arr = [3, 6, 4, 8, 9]

    sumArray(arr)

    for x in arr:
        print(x, end=' ')
C#
using System;

public class GfG
{
    static void sumArray(int[] arr)
    {
        int n = arr.Length;

        int[] leftSum = new int[n];
        int[] rightSum = new int[n];

        // Store left side sums
        for (int i = 1; i < n; i++)
        {
            leftSum[i] = leftSum[i - 1] + arr[i - 1];
        }

        // Store right side sums
        for (int i = n - 2; i >= 0; i--)
        {
            rightSum[i] = rightSum[i + 1] + arr[i + 1];
        }

        // Final answer
        for (int i = 0; i < n; i++)
        {
            arr[i] = leftSum[i] + rightSum[i];
        }
    }

    public static void Main()
    {
        int[] arr = { 3, 6, 4, 8, 9 };

        sumArray(arr);

        foreach (int x in arr)
        {
            Console.Write(x + " ");
        }
    }
}
JavaScript
function sumArray(arr) {
    const n = arr.length;

    const leftSum = new Array(n).fill(0);
    const rightSum = new Array(n).fill(0);

    // Store left side sums
    for (let i = 1; i < n; i++) {
        leftSum[i] = leftSum[i - 1] + arr[i - 1];
    }

    // Store right side sums
    for (let i = n - 2; i >= 0; i--) {
        rightSum[i] = rightSum[i + 1] + arr[i + 1];
    }

    // Final answer
    for (let i = 0; i < n; i++) {
        arr[i] = leftSum[i] + rightSum[i];
    }

    return 0;
}

// Driver code
const arr = [3, 6, 4, 8, 9];

sumArray(arr);

arr.forEach(x => console.log(x + " "));

Output
27 24 26 22 21 

Time Complexity: O(n)
Auxiliary Space: O(n)

[Expected Approach] Using Total Sum - O(n) Time and O(1) Space

The idea is to first calculate the total sum of all array elements. Then for every index, replace arr[i] with totalSum - arr[i], which gives the sum of all elements except the current element.

C++
#include <bits/stdc++.h>
using namespace std;

int sumArray(vector<int> &arr)
{
    int n = arr.size();

    int totalSum = 0;

    // Calculate total sum
    for (int i = 0; i < n; i++)
    {
        totalSum += arr[i];
    }

    // Replace every element
    for (int i = 0; i < n; i++)
    {
        arr[i] = totalSum - arr[i];
    }

    return 0;
}

// Driver code
int main()
{

    vector<int> arr = {3, 6, 4, 8, 9};

    sumArray(arr);

    for (int x : arr)
    {
        cout << x << " ";
    }

    return 0;
}
Java
import java.util.*;

public class GfG {

    static void sumArray(List<Integer> arr) {
        int n = arr.size();

        int totalSum = 0;

        // Calculate total sum
        for (int i = 0; i < n; i++) {
            totalSum += arr.get(i);
        }

        // Replace every element
        for (int i = 0; i < n; i++) {
            arr.set(i, totalSum - arr.get(i));
        }
    }

    public static void main(String[] args) {
        List<Integer> arr = new ArrayList<>(Arrays.asList(3, 6, 4, 8, 9));

        sumArray(arr);

        for (int x : arr) {
            System.out.print(x + " ");
        }
    }
}
Python
def sumArray(arr):
    n = len(arr)

    totalSum = 0

    # Calculate total sum
    for i in range(n):
        totalSum += arr[i]

    # Replace every element
    for i in range(n):
        arr[i] = totalSum - arr[i]

    return 0

# Driver code
if __name__ == "__main__":
    arr = [3, 6, 4, 8, 9]

    sumArray(arr)

    for x in arr:
        print(x, end=' ')
C#
using System;

class GfG {
    static void sumArray(int[] arr) {
        int n = arr.Length;

        int totalSum = 0;

        // Calculate total sum
        for (int i = 0; i < n; i++) {
            totalSum += arr[i];
        }

        // Replace every element
        for (int i = 0; i < n; i++) {
            arr[i] = totalSum - arr[i];
        }
    }

    static void Main() {
        int[] arr = { 3, 6, 4, 8, 9 };

        sumArray(arr);

        foreach (int x in arr) {
            Console.Write(x + " ");
        }
    }
}
JavaScript
function sumArray(arr) {
    let n = arr.length;

    let totalSum = 0;

    // Calculate total sum
    for (let i = 0; i < n; i++) {
        totalSum += arr[i];
    }

    // Replace every element
    for (let i = 0; i < n; i++) {
        arr[i] = totalSum - arr[i];
    }
}

// Driver code
let arr = [3, 6, 4, 8, 9];

sumArray(arr);

console.log(arr.join(' '));

Output
27 24 26 22 21 

Time Complexity: O(n)
Auxiliary Space: O(1)

Comment