Skip to content
Related Articles

Related Articles

Improve Article

Generate an N-length array with sum equal to twice the sum of its absolute difference with same-indexed elements of given array

  • Last Updated : 07 Apr, 2021

Given an array arr[] of size N, the task is to construct an array brr[] of size N that satisfies the following conditions:

  • In every pair of consecutive elements in the array brr[], one element must be divisible by the other, i.e. brr[i] must be divisible by brr[i + 1] or vice-versa.
  • Every ith element in the array brr[] must satisfy brr[i] >= arr[i] / 2.
  • The sum of elements of the array arr[] must be greater than or equal to 2 * Σabs(arr[i] – brr[i]).

Examples:

Input: arr[] = { 11, 5, 7, 3, 2 } 
Output: 8 4 4 2 2 
Explanation: 
abs(11 – 8) + abs(5 – 4) + abs(7 – 4) + abs(3 – 2) + abs(2 – 2) = 8 
arr[0] + arr[1] + … + arr[4] = 28 
2 * 8 <= 28 and for every ith element brr[i] >= arr[i] / 2. 
Therefore, one of the possible values of brr[] are 8 4 4 2 2.

Input: arr[] = { 11, 7, 5 } 
Output: { 8, 4, 4 }

Approach: The idea is based on the following observation:



If brr[i] is the nearest power of 2 and is smaller than or equal to arr[i], then brr[i] must be greater than or equal to arr[i] / 2 and also the sum of elements of the array, arr[] must be greater than or equal to 2 * Σabs(arr[i] – brr[i]).

Follow the steps below to solve the problem:

Below is the implementation of the above approach:

C++




// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to construct an array
// with given conditions
void constructArray(int arr[], int N)
{
    int brr[N] = { 0 };
 
    // Traverse the array arr[]
    for (int i = 0; i < N; i++) {
 
        int K = log(arr[i]) / log(2);
 
        // Stores closest power of 2
        // less than or equal to arr[i]
        int R = pow(2, K);
 
        // Stores R into brr[i]
        brr[i] = R;
    }
 
    // Print array elements
    for (int i = 0; i < N; i++) {
        cout << brr[i] << " ";
    }
}
 
// Driver Code
int main()
{
 
    // Given array
    int arr[] = { 11, 5, 7, 3, 2 };
 
    // Size of the array
    int N = sizeof(arr) / sizeof(arr[0]);
 
    // Function Call
    constructArray(arr, N);
 
    return 0;
}

Java




// Java program for the above approach
import java.util.*;
 
class GFG{
 
// Function to conan array
// with given conditions
static void constructArray(int arr[], int N)
{
    int brr[] = new int[N];
     
    // Traverse the array arr[]
    for(int i = 0; i < N; i++)
    {
        int K = (int)(Math.log(arr[i]) /
                      Math.log(2));
         
        // Stores closest power of 2
        // less than or equal to arr[i]
        int R = (int)Math.pow(2, K);
         
        // Stores R into brr[i]
        brr[i] = R;
    }
     
    // Print array elements
    for(int i = 0; i < N; i++)
    {
        System.out.print(brr[i] + " ");
    }
}
 
// Driver Code
public static void main(String[] args)
{
     
    // Given array
    int arr[] = { 11, 5, 7, 3, 2 };
 
    // Size of the array
    int N = arr.length;
 
    // Function Call
    constructArray(arr, N);
}
}
 
// This code is contributed by 29AjayKumar

Python3




# Python3 program for the above approach
from math import log
 
# Function to construct an array
# with given conditions
def constructArray(arr, N):
    brr = [0]*N
 
    # Traverse the array arr[]
    for i in range(N):
        K = int(log(arr[i])/log(2))
 
        # Stores closest power of 2
        # less than or equal to arr[i]
        R = pow(2, K)
 
        # Stores R into brr[i]
        brr[i] = R
 
    # Prarray elements
    for i in range(N):
        print(brr[i], end = " ")
 
# Driver Code
if __name__ == '__main__':
   
  # Given array
    arr = [11, 5, 7, 3, 2]
 
    # Size of the array
    N = len(arr)
 
    # Function Call
    constructArray(arr, N)
 
# This code is contributed by mohit kumar 29

C#




// C# program for the above approach   
using System;   
      
class GFG{   
      
// Function to construct an array   
// with given conditions   
static void constructArray(int []arr, int N)   
{   
    int[] brr = new int[N];   
    Array.Clear(brr, 0, brr.Length);   
     
    // Traverse the array arr[]   
    for(int i = 0; i < N; i++)
    {   
        int K = (int)(Math.Log(arr[i]) /
                      Math.Log(2));   
                       
        // Stores closest power of 2   
        // less than or equal to arr[i]   
        int R = (int)Math.Pow(2, K);   
         
        // Stores R into brr[i]   
        brr[i] = R;   
    }   
      
    // Print array elements   
    for(int i = 0; i < N; i++)
    {
        Console.Write(brr[i] + " ");   
    }   
}   
      
// Driver Code   
public static void Main()   
{   
     
    // Given array   
    int []arr = { 11, 5, 7, 3, 2 };   
      
    // Size of the array   
    int N = arr.Length;   
      
    // Function Call   
    constructArray(arr, N);   
}   
}
 
// This code is contributed by SURENDRA_GANGWAR

Javascript




<script>
 
// JavaScript program for the above approach
 
    // Function to conan array
    // with given conditions
    function constructArray(arr , N) {
        var brr = Array(N).fill(0);
 
        // Traverse the array arr
        for (i = 0; i < N; i++) {
            var K = parseInt( (Math.log(arr[i]) / Math.log(2)));
 
            // Stores closest power of 2
            // less than or equal to arr[i]
            var R = parseInt( Math.pow(2, K));
 
            // Stores R into brr[i]
            brr[i] = R;
        }
 
        // Print array elements
        for (i = 0; i < N; i++) {
            document.write(brr[i] + " ");
        }
    }
 
    // Driver Code
     
 
        // Given array
        var arr = [ 11, 5, 7, 3, 2 ];
 
        // Size of the array
        var N = arr.length;
 
        // Function Call
        constructArray(arr, N);
 
// This code is contributed by todaysgaurav
 
</script>
Output: 
8 4 4 2 2

 

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

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :