# Construct an array from its pair-sum array

Given a pair-sum array and size of the original array (n), construct the original array.
A pair-sum array for an array is the array that contains sum of all pairs in ordered form. For example pair-sum array for arr[] = {6, 8, 3, 4} is {14, 9, 10, 11, 12, 7}.
In general, pair-sum array for arr[0..n-1] is {arr[0]+arr[1], arr[0]+arr[2], ……., arr[1]+arr[2], arr[1]+arr[3], ……., arr[2]+arr[3], arr[2]+arr[4], …., arr[n-2]+arr[n-1}.
“Given a pair-sum array, construct the original array.”
We strongly recommend to minimize your browser and try this yourself.
Let the given array be “pair[]” and let there be n elements in original array. If we take a look at few examples, we can observe that arr[0] is half of pair[0] + pair[1] – pair[n-1]. Note that the value of pair[0] + pair[1] – pair[n-1] is (arr[0] + arr[1]) + (arr[0] + arr[2]) – (arr[1] + arr[2]).
Once we have evaluated arr[0], we can evaluate other elements by subtracting arr[0]. For example arr[1] can be evaluated by subtracting arr[0] from pair[0], arr[2] can be evaluated by subtracting arr[0] from pair[1].
Following is the implementation of the above idea.

## C++

 `#include ``using` `namespace` `std;` `// Fills element in arr[] from its pair sum array pair[]. ``// n is size of arr[]``void` `constructArr(``int` `arr[], ``int` `pair[], ``int` `n)``{``    ``arr[0] = (pair[0]+pair[1]-pair[n-1]) / 2;``    ``for` `(``int` `i=1; i

## Java

 `import` `java.io.*;` `class` `PairSum {``    ` `    ``// Fills element in arr[] from its pair sum array pair[]. ``    ``// n is size of arr[]``    ``static` `void` `constructArr(``int` `arr[], ``int` `pair[], ``int` `n)``    ``{``        ``arr[``0``] = (pair[``0``]+pair[``1``]-pair[n-``1``]) / ``2``;``        ``for` `(``int` `i=``1``; i

## Python3

 `# Fills element in arr[] from its ``# pair sum array pair[]. ``# n is size of arr[] ` `def` `constructArr(arr,pair,n):``    ``arr [``0``] ``=` `(pair[``0``]``+``pair[``1``]``-``pair[n``-``1``])``/``/``2``    ``for` `i ``in` `range``(``1``,n):``        ``arr[i] ``=` `pair[i``-``1``]``-``arr[``0``]` `# Driver code``if` `__name__``=``=``'__main__'``:``    ``pair ``=` `[``15``, ``13``, ``11``, ``10``, ``12``, ``10``, ``9``, ``8``, ``7``, ``5``]``    ``n ``=``5``    ``arr ``=` `[``0``]``*``n``    ``constructArr(arr,pair,n)``    ``for` `i ``in` `range``(n):``        ``print``(arr[i],end ``=``" "``)` `# This code is contributed by ``# Shrikant13`

## C#

 `// C# program to construct an``// array from its pair-sum array``using` `System;` `class` `PairSum ``{``    ``// Fills element in arr[] from its``    ``// pair sum array pair[]. ``    ``// n is size of arr[]``    ``static` `void` `constructArr(``int` `[]arr, ``int` `[]pair,``                                             ``int` `n)``    ``{``        ``arr[0] = (pair[0] + pair[1] - pair[n - 1]) / 2;``        ``for` `(``int` `i = 1; i < n; i++)``            ``arr[i] = pair[i - 1] - arr[0];``    ``}``    ` `    ``// Driver program to test above function``    ``public` `static` `void` `Main()``    ``{``        ``int` `[]pair = {15, 13, 11, 10, 12,``                         ``10, 9, 8, 7, 5};``        ``int` `n = 5;``        ``int` `[]arr = ``new` `int``[n];``        ``constructArr(arr, pair, n);``        ``for` `(``int` `i = 0; i < n; i++)``            ``Console.Write(arr[i] + ``" "``);     ``    ``}``}` `// This code is contributed by nitin mittal`

## PHP

 ``

## Javascript

 ``

Output:

` 8 7 5 3 2 `

Time complexity of constructArr() is O(n) where n is number of elements in arr[].

Auxiliary Space: O(1)

Previous
Next