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

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Output

2 -1 -5 -3 8 6 







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

competitive-programming-img




My Personal Notes arrow_drop_up

Recommended Posts:


Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.