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




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

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 zambiatek!

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button