Wednesday, July 3, 2024
HomeData ModellingData Structure & AlgorithmConstruct an array from its pair-product

Construct an array from its pair-product

Given a pair-product array pair[], the task is to find the original array. A pair-product array for an array arr[] is the array that contains product of all the pairs in ordered form i.e. {(arr[0] * arr[1]), (arr[0] * arr[2]), …, (arr[1] * arr[2]), (arr[1] * arr[3]), …, (arr[n – 2] * arr[n – 1])}.
Examples: 
 

Input: pair[] = {2, 3, 6} 
Output: 1 2 3
Input: pair[] = {48, 18, 24, 24, 32, 12} 
Output: 6 8 3 4 
 

 

Approach: First find the size of the required array from the given pair-product array. Assuming the size of the original array to be N and size of the pair-product array be X. Therefore, by solving (N * (N – 1)) / 2 = X, the value of N can be calculated as N = (1 + (int)sqrt(1 + 8 * X)) / 2
Now lets see the solution with an example, lets say the pair-product array of [A, B, C, D] be arr[AB, AC, AD, BC, BD, CD] then by taking sqrt((arr[0] * arr[1]) / arr[n – 1]) -> sqrt((AB * AC) / BC) will give the value A
Once the value of the first element has been recovered then all the remaining elements of the pair-product array can be divided by it to get the remaining elements of the original array.
Below is the implementation of the above approach: 
 

C++




// C++ implementation of the approach
#include <iostream>
#include <math.h>
using namespace std;
 
// Utility function to print the array
void printArr(int arr[], int n)
{
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
}
 
// Function to generate the original
// array from the pair-product array
void constructArr(int pair[], int n)
{
    int size = (1 + (int)sqrt(1 + 8 * n)) / 2;
    int arr[size];
 
    // First element of the resulting array
    arr[0] = sqrt((pair[0] * pair[1]) / pair[size - 1]);
 
    // Find all the other elements
    for (int i = 1; i < size; i++)
        arr[i] = pair[i - 1] / arr[0];
 
    // Print the elements of the generated array
    printArr(arr, size);
}
 
// Driver code
int main()
{
    int pair[] = { 48, 18, 24, 24, 32, 12 };
    int n = sizeof(pair) / sizeof(int);
 
    constructArr(pair, n);
 
    return 0;
}


Java




// Java implementation of the approach
class GFG
{
 
// Utility function to print the array
static void printArr(int arr[], int n)
{
    for (int i = 0; i < n; i++)
        System.out.print(arr[i] + " ");
}
 
// Function to generate the original
// array from the pair-product array
static void constructArr(int pair[], int n)
{
    int size = (1 + (int)Math.sqrt(1 + 8 * n)) / 2;
    int []arr = new int[size];
 
    // First element of the resulting array
    arr[0] = (int) Math.sqrt((pair[0] * pair[1]) /
                                        pair[size - 1]);
 
    // Find all the other elements
    for (int i = 1; i < size; i++)
        arr[i] = pair[i - 1] / arr[0];
 
    // Print the elements of the generated array
    printArr(arr, size);
}
 
// Driver code
public static void main(String[] args)
{
    int pair[] = { 48, 18, 24, 24, 32, 12 };
    int n = pair.length;
 
    constructArr(pair, n);
}
}
 
// This code is contributed by PrinciRaj1992


Python3




# Python3 implementation of the approach
from math import sqrt
 
# Utility function to print the array
def printArr(arr, n) :
 
    for i in range(n) :
        print(arr[i], end = " ");
 
# Function to generate the original
# array from the pair-product array
def constructArr(pair, n) :
 
    size = int((1 + sqrt(1 + 8 * n)) // 2);
    arr = [0] * (size);
 
    # First element of the resulting array
    arr[0] = int(sqrt((pair[0] * pair[1]) /
                       pair[size - 1]));
 
    # Find all the other elements
    for i in range(1, size) :
        arr[i] = pair[i - 1] // arr[0];
 
    # Print the elements of the generated array
    printArr(arr, size);
 
# Driver code
if __name__ == "__main__" :
 
    pair = [ 48, 18, 24, 24, 32, 12 ];
    n = len(pair);
 
    constructArr(pair, n);
 
# This code is contributed by AnkitRai01


C#




// C# implementation of the approach
using System;
     
class GFG
{
 
// Utility function to print the array
static void printArr(int []arr, int n)
{
    for (int i = 0; i < n; i++)
        Console.Write(arr[i] + " ");
}
 
// Function to generate the original
// array from the pair-product array
static void constructArr(int []pair, int n)
{
    int size = (1 + (int)Math.Sqrt(1 + 8 * n)) / 2;
    int []arr = new int[size];
 
    // First element of the resulting array
    arr[0] = (int) Math.Sqrt((pair[0] * pair[1]) /
                                        pair[size - 1]);
 
    // Find all the other elements
    for (int i = 1; i < size; i++)
        arr[i] = pair[i - 1] / arr[0];
 
    // Print the elements of the generated array
    printArr(arr, size);
}
 
// Driver code
public static void Main(String[] args)
{
    int []pair = { 48, 18, 24, 24, 32, 12 };
    int n = pair.Length;
 
    constructArr(pair, n);
}
}
 
// This code is contributed by Rajput-Ji


Javascript




<script>
 
// JavaScript implementation of the approach
 
 
// Utility function to print the array
function printArr(arr, n) {
    for (let i = 0; i < n; i++)
        document.write(arr[i] + " ");
}
 
// Function to generate the original
// array from the pair-product array
function constructArr(pair, n) {
    let size = Math.floor((1 + Math.sqrt(1 + 8 * n)) / 2);
    let arr = new Array(size);
 
    // First element of the resulting array
     
    arr[0] =
    Math.floor(Math.sqrt((pair[0] * pair[1]) / pair[size - 1]));
 
    // Find all the other elements
    for (let i = 1; i < size; i++)
        arr[i] = Math.floor(pair[i - 1] / arr[0]);
 
    // Print the elements of the generated array
    printArr(arr, size);
}
 
// Driver code
 
let pair = [48, 18, 24, 24, 32, 12];
let n = pair.length;
constructArr(pair, n);
 
</script>


Output: 

6 8 3 4

 

Time Complexity: O(N).
Auxiliary Space: O(N). 

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

Ted Musemwa
As a software developer I’m interested in the intersection of computational thinking and design thinking when solving human problems. As a professional I am guided by the principles of experiential learning; experience, reflect, conceptualise and experiment.
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments