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 0void 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 Codeint 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 approachimport java.util.*; class GFG{ // Function to generate a new array with// product of same indexed elements with // arr[] equal to 0static 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 Codepublic 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 0def 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 codearr = [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 0static 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 Codepublic 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 0function 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> |
2 -1 -5 -3 8 6
Time Complexity: O(N)
Auxiliary Space: O(N)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!


