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++ 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 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 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# 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 |
<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> |
2 -1 -5 -3 8 6
Time Complexity: O(N)
Auxiliary Space: O(N)