Open In App

Construct array with sum of product of same indexed elements in the given array equal to zero

Last Updated : 28 Feb, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Given an array, arr[] of size N (always even), the task is to construct a new array consisting of N non-zero integers such that the sum of the product of the same indexed elements of arr[] and the new array is equal to 0. If multiple solutions exist, print any one of them.

Examples: 

Input: arr[] = {1, 2, 3, 4}
Output: -4 -3 2 1 
Explanation: 
Sum of product of same indexed array elements of arr[] with the new array = {1 * (-4) + 2 * (-3) + 3 * (2) + 4 * (1)} = 0. 
Therefore, the required output is -4 -3 2 1.

Input: arr[] = {-1, 2, -3, 6, 4}
Output: 1 1 1 1 -1

Approach: The problem can be solved using the Greedy technique. The idea is based on the following observations:

arr[i] * (-arr[i + 1]) + arr[i + 1] * arr[i] = 0  

Follow the steps below to solve the problem:

  • Initialize an array, say newArr[] to store the new array elements such that ?(arr[i] * newArr[i]) = 0
  • Traverse the given array using variable i and check if i is even or not. If found to be true then newArr[i] = arr[i + 1].
  • Otherwise, newArr[i] = -arr[i – 1]
  • Finally, print the values of newArr[].

Below is the implementation of the above approach 

C++




// C++ program to implement
// the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to generate a new array with product
// of same indexed elements with arr[] equal to 0
void constructNewArraySumZero(int arr[], int N)
{
    // Stores sum of same indexed array
    // elements of arr and new array
    int newArr[N];
 
    // Traverse the array
    for (int i = 0; i < N; i++) {
 
        // If i is an even number
        if (i % 2 == 0) {
 
            // Insert arr[i + 1] into
            // the new array newArr[]
            newArr[i] = arr[i + 1];
        }
 
        else {
 
            // Insert -arr[i - 1] into
            // the new array newArr[]
            newArr[i] = -arr[i - 1];
        }
    }
 
    // Print new array elements
    for (int i = 0; i < N; i++) {
        cout << newArr[i] << " ";
    }
}
 
// Driver Code
int main()
{
    int arr[] = { 1, 2, 3, -5, -6, 8 };
    int N = sizeof(arr) / sizeof(arr[0]);
 
    constructNewArraySumZero(arr, N);
 
    return 0;
}


Java




// Java program to implement
// the above approach
import java.util.*;
  
class GFG{
  
// Function to generate a new array with
// product of same indexed elements with
// arr[] equal to 0
static void constructNewArraySumZero(int arr[],
                                     int N)
{
     
    // Stores sum of same indexed array
    // elements of arr and new array
    int newArr[] = new int[N];
  
    // Traverse the array
    for(int i = 0; i < N; i++)
    {
         
        // If i is an even number
        if (i % 2 == 0)
        {
             
            // Insert arr[i + 1] into
            // the new array newArr[]
            newArr[i] = arr[i + 1];
        }
        else
        {
             
            // Insert -arr[i - 1] into
            // the new array newArr[]
            newArr[i] = -arr[i - 1];
        }
    }
  
    // Print new array elements
    for(int i = 0; i < N; i++)
    {
        System.out.print(newArr[i] + " ");
    }
}
  
// Driver Code
public static void main(String[] args)
{
    int arr[] = { 1, 2, 3, -5, -6, 8 };
    int N = arr.length;
  
    constructNewArraySumZero(arr, N);
}
}
  
// This code is contributed by susmitakundugoaldanga


Python3




# Python3 program to implement
# the above approach
 
# Function to generate a new array
# with product of same indexed elements
# with arr[] equal to 0
def constructNewArraySumZero(arr, N):
 
    # Stores sum of same indexed array
    # elements of arr and new array
    newArr = [0] * N
 
    # Traverse the array
    for i in range(N):
         
        # If i is an even number
        if (i % 2 == 0):
 
            # Insert arr[i + 1] into
            # the new array newArr[]
            newArr[i] = arr[i + 1]
 
        else:
 
            # Insert -arr[i - 1] into
            # the new array newArr[]
            newArr[i] = -arr[i - 1]
 
    # Print new array elements
    for i in range(N):
        print(newArr[i] ,
              end = " ")
 
# Driver code
arr = [1, 2, 3, -5, -6, 8]
N = len(arr)
constructNewArraySumZero(arr, N)
 
# This code is contributed by divyeshrabadiya07


C#




// C# program to implement
// the above approach 
using System;
   
class GFG{
   
// Function to generate a new array with
// product of same indexed elements with
// arr[] equal to 0
static void constructNewArraySumZero(int[] arr,
                                     int N)
{
     
    // Stores sum of same indexed array
    // elements of arr and new array
    int[] newArr = new int[N];
   
    // Traverse the array
    for(int i = 0; i < N; i++)
    {
          
        // If i is an even number
        if (i % 2 == 0)
        {
             
            // Insert arr[i + 1] into
            // the new array newArr[]
            newArr[i] = arr[i + 1];
        }
        else
        {
              
            // Insert -arr[i - 1] into
            // the new array newArr[]
            newArr[i] = -arr[i - 1];
        }
    }
   
    // Print new array elements
    for(int i = 0; i < N; i++)
    {
        Console.Write(newArr[i] + " ");
    }
}
   
// Driver Code
public static void Main()
{
    int[] arr = { 1, 2, 3, -5, -6, 8 };
    int N = arr.Length;
   
    constructNewArraySumZero(arr, N);
}
}
 
// This code is contributed by code_hunt


Javascript




<script>
 
// Javascript program to implement
// the above approach
 
// Function to generate a new array with
// product of same indexed elements with
// arr[] equal to 0
function constructNewArraySumZero(arr, N)
{
      
    // Stores sum of same indexed array
    // elements of arr and new array
    let newArr = [];
   
    // Traverse the array
    for(let i = 0; i < N; i++)
    {
          
        // If i is an even number
        if (i % 2 == 0)
        {
              
            // Insert arr[i + 1] into
            // the new array newArr[]
            newArr[i] = arr[i + 1];
        }
        else
        {
              
            // Insert -arr[i - 1] into
            // the new array newArr[]
            newArr[i] = -arr[i - 1];
        }
    }
   
    // Print new array elements
    for(let i = 0; i < N; i++)
    {
        document.write(newArr[i] + " ");
    }
}
   
    // Driver Code
    let arr = [ 1, 2, 3, -5, -6, 8 ];
    let N = arr.length;
   
    constructNewArraySumZero(arr, N);
 
// This code is contributed by souravghosh0416.
</script>


Output

2 -1 -5 -3 8 6 

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



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads