Related Articles
A Sum Array Puzzle
• Last Updated : 15 Mar, 2019

Given an array arr[] of n integers, construct a Sum Array sum[] (of same size) such that sum[i] is equal to the sum of all the elements of arr[] except arr[i]. Solve it without subtraction operator and in O(n).

Examples:

Input : arr[] = {3, 6, 4, 8, 9}
Output : sum[] = {27, 24, 26, 22, 21}

Input : arr[] = {4, 5, 7, 3, 10, 1}
Output : sum[] = {26, 25, 23, 27, 20, 29}

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

Algorithm:
1) Construct a temporary array leftSum[] such that leftSum[i] contains sum of all elements on left of arr[i] excluding arr[i].
2) Construct another temporary array rightSum[] such that rightSum[i] contains sum of all elements on on right of arr[i] excluding arr[i].
3) To get sum[], sum left[] and right[].

## C/C++

 `// C++ implementation of above approach``#include ``using` `namespace` `std;`` ` `void` `sumArray(``int` `arr[], ``int` `n)``{``    ``/* Allocate memory for temporary arrays leftSum[],``       ``rightSum[] and Sum[]*/``    ``int` `leftSum[n], rightSum[n], Sum[n], i, j;`` ` `    ``/* Left most element of left array is always 0 */``    ``leftSum[0] = 0;`` ` `    ``/* Rightmost most element of right ``       ``array is always 0 */``    ``rightSum[n - 1] = 0;`` ` `    ``/* Construct the left array*/``    ``for` `(i = 1; i < n; i++)``        ``leftSum[i] = arr[i - 1] + leftSum[i - 1];`` ` `    ``/* Construct the right array*/``    ``for` `(j = n - 2; j >= 0; j--)``        ``rightSum[j] = arr[j + 1] + rightSum[j + 1];`` ` `    ``/* Construct the sum array using ``        ``left[] and right[] */``    ``for` `(i = 0; i < n; i++)``        ``Sum[i] = leftSum[i] + rightSum[i];`` ` `    ``/* print the constructed prod array */``    ``for` `(i = 0; i < n; i++)``        ``cout << Sum[i] << ``" "``;``}`` ` `/* Driver program to test above functions */``int` `main()``{``    ``int` `arr[] = { 3, 6, 4, 8, 9 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]);``    ``sumArray(arr, n);`` ` `    ``return` `0;``}`

## Java

 `// Java implementation of above approach``import` `java.util.*;``import` `java.lang.*;``import` `java.io.*;`` ` `class` `Geeks {``    ``public` `static` `void` `sumArray(``int` `arr[], ``int` `n)``    ``{``        ``/* Allocate memory for temporary arrays ``           ``leftSum[], rightSum[] and Sum[]*/``        ``int` `leftSum[] = ``new` `int``[n];``        ``int` `rightSum[] = ``new` `int``[n];``        ``int` `Sum[] = ``new` `int``[n];`` ` `        ``int` `i = ``0``, j = ``0``;`` ` `        ``/* Left most element of left array is ``           ``always 0 */``        ``leftSum[``0``] = ``0``;`` ` `        ``/* Right most element of rght array ``           ``is always 0 */``        ``rightSum[n - ``1``] = ``0``;`` ` `        ``/* Construct the left array*/``        ``for` `(i = ``1``; i < n; i++)``            ``leftSum[i] = arr[i - ``1``] + leftSum[i - ``1``];`` ` `        ``/* Construct the right array*/``        ``for` `(j = n - ``2``; j >= ``0``; j--)``            ``rightSum[j] = arr[j + ``1``] + rightSum[j + ``1``];`` ` `        ``/* Construct the sum array using ``        ``left[] and right[] */``        ``for` `(i = ``0``; i < n; i++)``            ``Sum[i] = leftSum[i] + rightSum[i];`` ` `        ``/*print the sum array*/``        ``for` `(i = ``0``; i < n; i++)``            ``System.out.print(Sum[i] + ``" "``);``    ``}`` ` `    ``/* Driver function to test above function*/``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `arr[] = { ``3``, ``6``, ``4``, ``8``, ``9` `};``        ``int` `n = arr.length;``        ``sumArray(arr, n);``    ``}``}`

## Python3

 `# Python3 implementation of above approach`` ` `def` `sumArray(arr, n):`` ` `    ``# Allocate memory for temporary arrays ``    ``# leftSum[], rightSum[] and Sum[]``    ``leftSum ``=` `[``0` `for` `i ``in` `range``(n)]``    ``rightSum ``=` `[``0` `for` `i ``in` `range``(n)]``    ``Sum` `=` `[``0` `for` `i ``in` `range``(n)]``    ``i, j ``=` `0``, ``0`` ` `    ``# Left most element of left ``    ``# array is always 0 ``    ``leftSum[``0``] ``=` `0`` ` `    ``# Rightmost most element of right ``    ``# array is always 0 ``    ``rightSum[n ``-` `1``] ``=` `0`` ` `    ``# Construct the left array``    ``for` `i ``in` `range``(``1``, n):``        ``leftSum[i] ``=` `arr[i ``-` `1``] ``+` `leftSum[i ``-` `1``]`` ` `    ``# Construct the right array``    ``for` `j ``in` `range``(n ``-` `2``, ``-``1``, ``-``1``):``        ``rightSum[j] ``=` `arr[j ``+` `1``] ``+` `rightSum[j ``+` `1``]`` ` `    ``# Construct the sum array using ``    ``# left[] and right[] ``    ``for` `i ``in` `range``(``0``, n):``        ``Sum``[i] ``=` `leftSum[i] ``+` `rightSum[i]`` ` `    ``# print the constructed prod array ``    ``for` `i ``in` `range``(n):``        ``print``(``Sum``[i], end ``=` `" "``)`` ` ` ` `# Driver Code``arr ``=` `[``3``, ``6``, ``4``, ``8``, ``9``] ``n ``=` `len``(arr)``sumArray(arr, n)`` ` `# This code is contributed by ``# mohit kumar 29`

## C#

 `// C# implementation of above approach`` ` `using` `System ;`` ` `class` `Geeks { ``    ``public` `static` `void` `sumArray(``int` `[]arr, ``int` `n) ``    ``{ ``        ``/* Allocate memory for temporary arrays ``        ``leftSum[], rightSum[] and Sum[]*/``        ``int` `[]leftSum = ``new` `int``[n]; ``        ``int` `[]rightSum = ``new` `int``[n]; ``        ``int` `[]Sum = ``new` `int``[n]; `` ` `        ``int` `i = 0, j = 0; `` ` `        ``/* Left most element of left array is ``        ``always 0 */``        ``leftSum[0] = 0; `` ` `        ``/* Right most element of rght array ``        ``is always 0 */``        ``rightSum[n - 1] = 0; `` ` `        ``/* Construct the left array*/``        ``for` `(i = 1; i < n; i++) ``            ``leftSum[i] = arr[i - 1] + leftSum[i - 1]; `` ` `        ``/* Construct the right array*/``        ``for` `(j = n - 2; j >= 0; j--) ``            ``rightSum[j] = arr[j + 1] + rightSum[j + 1]; `` ` `        ``/* Construct the sum array using ``        ``left[] and right[] */``        ``for` `(i = 0; i < n; i++) ``            ``Sum[i] = leftSum[i] + rightSum[i]; `` ` `        ``/*print the sum array*/``        ``for` `(i = 0; i < n; i++) ``            ``Console.Write(Sum[i] + ``" "``); ``    ``} `` ` `    ``/* Driver function to test above function*/``    ``public` `static` `void` `Main() ``    ``{ ``        ``int` `[]arr = { 3, 6, 4, 8, 9 }; ``        ``int` `n = arr.Length; ``        ``sumArray(arr, n); ``    ``} ``    ``// This code is contributed by Ryuga``} `

## PHP

 `= 0; ``\$j``--)``        ``\$rightSum``[``\$j``] = ``\$arr``[``\$j` `+ 1] +``                        ``\$rightSum``[``\$j` `+ 1];`` ` `    ``/* Construct the sum array using ``        ``left[] and right[] */``    ``for` `(``\$i` `= 0; ``\$i` `< ``\$n``; ``\$i``++)``        ``\$Sum``[``\$i``] = ``\$leftSum``[``\$i``] + ``\$rightSum``[``\$i``];`` ` `    ``/* print the constructed prod array */``    ``for` `(``\$i` `= 0; ``\$i` `< ``\$n``; ``\$i``++)``        ``echo` `\$Sum``[``\$i``].``" "``;``}`` ` `// Driver Code``\$arr` `= ``array``( 3, 6, 4, 8, 9 );``\$n` `= ``count``(``\$arr``);``sumArray(``\$arr``, ``\$n``);`` ` `// This code is contributed``// by chandan_jnu``?>`
Output:
```27 24 26 22 21
```

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

The above method can be optimized to work in O(1) auxiliary space.

## C/C++

 `// C++ implementation of above approach``#include ``using` `namespace` `std;`` ` `void` `sumArray(``int` `arr[], ``int` `n)``{``    ``int` `i, temp = 0;`` ` `    ``/* Allocate memory for the sum array */``    ``int` `Sum[n];`` ` `    ``/* Initialize the sum array as 0 */``    ``memset``(Sum, 0, n);`` ` `    ``/* In this loop, temp variable contains ``       ``sum of elements on left side excluding``       ``arr[i] */``    ``for` `(i = 0; i < n; i++) {``        ``Sum[i] = temp;``        ``temp += arr[i];``    ``}`` ` `    ``/* Initialize temp to 0 for sum on right``       ``side */``    ``temp = 0;`` ` `    ``/* In this loop, temp variable contains``       ``sum of  elements on right side excluding``        ``arr[i] */``    ``for` `(i = n - 1; i >= 0; i--) {``        ``Sum[i] += temp;``        ``temp += arr[i];``    ``}`` ` `    ``for` `(i = 0; i < n; i++)``        ``cout << Sum[i] << ``" "``;``}`` ` `/* Driver program to test above function */``int` `main()``{``    ``int` `arr[] = { 3, 6, 4, 8, 9 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]);``    ``sumArray(arr, n);`` ` `    ``return` `0;``}`

## Java

 `// Java implementation of above approach``import` `java.util.*;``import` `java.lang.*;``import` `java.io.*;`` ` `class` `Geeks {``    ``public` `static` `void` `sumArray(``int` `arr[], ``int` `n)``    ``{``        ``int` `i = ``0``, temp = ``0``;``        ``int` `Sum[] = ``new` `int``[n];`` ` `        ``Arrays.fill(Sum, ``0``);`` ` `        ``/* In this loop, temp variable contains``           ``sum of elements on left side excluding``           ``arr[i] */``        ``for` `(i = ``0``; i < n; i++) {``            ``Sum[i] = temp;``            ``temp += arr[i];``        ``}`` ` `        ``/* Initialize temp to 0 for sum on right side */``        ``temp = ``0``;`` ` `        ``/* In this loop, temp variable contains``           ``sum of elements on right side excluding``           ``arr[i] */``        ``for` `(i = n - ``1``; i >= ``0``; i--) {``            ``Sum[i] += temp;``            ``temp += arr[i];``        ``}`` ` `        ``for` `(i = ``0``; i < n; i++)``            ``System.out.print(Sum[i] + ``" "``);``    ``}`` ` `    ``/* Driver function to test above function*/``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `arr[] = { ``3``, ``6``, ``4``, ``8``, ``9` `};``        ``int` `n = arr.length;``        ``sumArray(arr, n);``    ``}``}`

## Python3

 `# Python3 implementation of above approach``def` `sumArray(arr, n):`` ` `    ``i, temp ``=` `0``, ``0`` ` `    ``# Allocate memory for the sum array */``    ``Sum` `=` `[``0` `for` `i ``in` `range``(n)]`` ` `    ``'''In this loop, temp variable contains ``    ``sum of elements on left side excluding``    ``arr[i] '''``    ``for` `i ``in` `range``(n):``        ``Sum``[i] ``=` `temp``        ``temp ``+``=` `arr[i]``     ` `    ``# Initialize temp to 0 for sum ``    ``# on right side */``    ``temp ``=` `0`` ` `    ``''' In this loop, temp variable contains``        ``sum of elements on right side excluding``        ``arr[i] */'''``    ``for` `i ``in` `range``(n ``-` `1``, ``-``1``, ``-``1``):``        ``Sum``[i] ``+``=` `temp``        ``temp ``+``=` `arr[i]``     ` `    ``for` `i ``in` `range``(n):``        ``print``(``Sum``[i], end ``=` `" "``)`` ` `# Driver Code``arr ``=` `[ ``3``, ``6``, ``4``, ``8``, ``9` `]``n ``=` `len``(arr)``sumArray(arr, n)`` ` `# This code is contributed by``# Mohit Kumar 29`

## C#

 `// C# implementation of above approach``using` `System;``class` `Geeks {``    ``public` `static` `void` `sumArray(``int` `[]arr, ``int` `n)``    ``{``        ``int` `i = 0, temp = 0;``        ``int` `[]Sum = ``new` `int``[n];``        ``for``( i=0;i= 0; i--) {``            ``Sum[i] += temp;``            ``temp += arr[i];``        ``}`` ` `        ``for` `(i = 0; i < n; i++)``            ``Console.Write(Sum[i] + ``" "``);``    ``}`` ` `    ``/* Driver function to test above function*/``    ``public` `static` `void` `Main()``    ``{``        ``int` `[]arr = { 3, 6, 4, 8, 9 };``        ``int` `n = arr.Length;``        ``sumArray(arr, n);``    ``}``}``// This code is contributed by inder_verma..`

## PHP

 `= 0; ``\$i``--) ``    ``{``        ``\$Sum``[``\$i``] += ``\$temp``;``        ``\$temp` `+= ``\$arr``[``\$i``];``    ``}`` ` `    ``for` `(``\$i` `= 0; ``\$i` `< ``\$n``; ``\$i``++)``        ``echo` `\$Sum``[``\$i``] . ``" "``;``}`` ` `// Driver Code``\$arr` `= ``array``( 3, 6, 4, 8, 9 );``\$n` `= ``count``(``\$arr``);``sumArray(``\$arr``, ``\$n``);`` ` `// This code is contributed by``// chandan_jnu``?>`
Output:
```27 24 26 22 21
```

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

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up