Find the original Array from given array where ith element is the average of first i elements
Last Updated :
26 Oct, 2021
Given an array arr[] of length N, the task is to find the original array such that every ith element in the given array(arr[i]) is the average value of the first i elements of the original array.
Examples:
Input: arr = {4 3 3 3}
Output: 4 2 3 3
Explanation: (4) / 1 = 1, (4+2) / 2 = 3, (4+2+3) / 3 = 3, (4+2+3+3) / 4 = 3
Input: arr = {2 6 8 10}
Output: 2 10 12 16
Explanation: (2) / 1 = 2, (2+10) / 2 = 6, (2+10+12) / 3 = 8, (2+10+12+16) / 4 = 10
Approach: The given problem can be solved using a mathematical approach. Follow the steps below:
- Initialize a variable sum to the first element of the array arr
- Iterate the array arr from 2nd index till the end and at every iteration:
- Multiply current element arr[i] with current index + 1 (i + 1) and subtract the value of sum from it
- Add the resulting current element to the variable sum
- Return the resulting array after modification as it will be the original array
C++
#include <iostream>
using namespace std;
void findOriginal( int arr[], int N)
{
int sum = arr[0];
for ( int i = 1; i < N; i++) {
arr[i] = (i + 1) * arr[i] - sum;
sum += arr[i];
}
for ( int i = 0; i < N; i++) {
cout << arr[i] << " " ;
}
}
int main()
{
int arr[] = { 2, 6, 8, 10 };
int N = sizeof (arr) / sizeof (arr[0]);
findOriginal(arr, N);
return 0;
}
|
Java
class GFG
{
static void findOriginal( int arr[], int N)
{
int sum = arr[ 0 ];
for ( int i = 1 ; i < N; i++) {
arr[i] = (i + 1 ) * arr[i] - sum;
sum += arr[i];
}
for ( int i = 0 ; i < N; i++) {
System.out.print(arr[i] + " " );
}
}
public static void main(String [] args)
{
int [] arr = new int [] { 2 , 6 , 8 , 10 };
int N = arr.length;
findOriginal(arr, N);
}
}
|
Python3
def findOriginal(arr, N):
sum = arr[ 0 ]
for i in range ( 1 , N):
arr[i] = (i + 1 ) * arr[i] - sum
sum = sum + arr[i]
for i in range ( 0 , N):
print (arr[i], end = " " )
arr = [ 2 , 6 , 8 , 10 ]
N = len (arr)
findOriginal(arr, N)
|
C#
using System;
class GFG {
static void findOriginal( int [] arr, int N)
{
int sum = arr[0];
for ( int i = 1; i < N; i++) {
arr[i] = (i + 1) * arr[i] - sum;
sum += arr[i];
}
for ( int i = 0; i < N; i++)
Console.Write(arr[i] + " " );
}
public static void Main(String[] args)
{
int N = 4;
int [] arr = { 2, 6, 8, 10 };
findOriginal(arr, N);
}
}
|
Javascript
<script>
function findOriginal(arr, N)
{
var sum = arr[0];
for ( var i = 1; i < N; i++) {
arr[i] = (i + 1) * arr[i] - sum;
sum += arr[i];
}
for ( var i = 0; i < N; i++) {
document.write(arr[i] + " " );
}
}
var arr = [ 2, 6, 8, 10 ];
var N = arr.length;
findOriginal(arr, N);
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...