Given an integer N, the task is to find an array of length N that contains same count of odd and even elements with an equal sum of even and odd elements in the array.
Note: Print -1 if no such array is possible.
Examples:
Input: N = 4
Output: 1 2 5 4
Explanation:
Even elements of the array – {2, 4}, S(even) = 6
Odd elements of the array – {1, 5}, S(odd) = 6Input: N = 6
Output: -1
Explanation:
There are no such array which contains 3 even elements and 3 odd elements with equal sum.
Approach: The key observation in the problem is that only the length of array which is multiple of 4 can form array with equal number of even and odd elements with equal sum. Below is the illustration of the steps:
- Even elements of the array is the first N/2 even elements of the natural numbers starting from 2.
- Similarly, (N/2 – 1) odd elements of the array is the first (N/2 – 1) odd elements of the natural numbers starting from 1.
- The Last odd element of the array is the required value to make the sum of the even and odd elements of the array equal.
Last Odd Element = (sum of even elements) - (sum of N/2 - 1 odd elements)
Below is the implementation of the above approach:
// C++ implementation to find the // array containing same count of // even and odd elements with equal // sum of even and odd elements #include <bits/stdc++.h> using namespace std;
// Function to find the array such that // the array contains the same count // of even and odd elements with equal // sum of even and odd elements void findSolution( int N)
{ // Length of array which is not
// divisible by 4 is unable to
// form such array
if (N % 4 != 0)
cout << -1 << "\n" ;
else {
int temp = 0, sum_odd = 0,
sum_even = 0;
int result[N] = { 0 };
// Loop to find the resulted
// array containing the same
// count of even and odd elements
for ( int i = 0; i < N; i += 2) {
temp += 2;
result[i + 1] = temp;
// Find the total sum
// of even elements
sum_even += result[i + 1];
result[i] = temp - 1;
// Find the total sum
// of odd elements
sum_odd += result[i];
}
// Find the difference between the
// total sum of even and odd elements
int diff = sum_even - sum_odd;
// The difference will be added
// in the last odd element
result[N - 2] += diff;
for ( int i = 0; i < N; i++)
cout << result[i] << " " ;
cout << "\n" ;
}
} // Driver Code int main()
{ int N = 8;
findSolution(N);
return 0;
} |
// Java implementation to find the // array containing same count of // even and odd elements with equal // sum of even and odd elements class GFG{
// Function to find the array such that // the array contains the same count // of even and odd elements with equal // sum of even and odd elements static void findSolution( int N)
{ // Length of array which is not
// divisible by 4 is unable to
// form such array
if (N % 4 != 0 )
System.out.print(- 1 + "\n" );
else {
int temp = 0 , sum_odd = 0 ;
int sum_even = 0 ;
int result[] = new int [N];
// Loop to find the resulted
// array containing the same
// count of even and odd elements
for ( int i = 0 ; i < N; i += 2 )
{
temp += 2 ;
result[i + 1 ] = temp;
// Find the total sum
// of even elements
sum_even += result[i + 1 ];
result[i] = temp - 1 ;
// Find the total sum
// of odd elements
sum_odd += result[i];
}
// Find the difference between the
// total sum of even and odd elements
int diff = sum_even - sum_odd;
// The difference will be added
// in the last odd element
result[N - 2 ] += diff;
for ( int i = 0 ; i < N; i++)
System.out.print(result[i] + " " );
System.out.print( "\n" );
}
} // Driver Code public static void main(String[] args)
{ int N = 8 ;
findSolution(N);
} } // This code is contributed by Amit Katiyar |
# Python3 implementation to find the # array containing same count of # even and odd elements with equal # sum of even and odd elements # Function to find the array such that # the array contains the same count # of even and odd elements with equal # sum of even and odd elements def findSolution(N):
# Length of array which is not
# divisible by 4 is unable to
# form such array
if (N % 4 ! = 0 ):
print ( - 1 )
else :
temp = 0
sum_odd = 0
sum_even = 0
result = [ 0 ] * N
# Loop to find the resulted
# array containing the same
# count of even and odd elements
for i in range ( 0 , N, 2 ):
temp + = 2
result[i + 1 ] = temp
# Find the total sum
# of even elements
sum_even + = result[i + 1 ]
result[i] = temp - 1
# Find the total sum
# of odd elements
sum_odd + = result[i]
# Find the difference between the
# total sum of even and odd elements
diff = sum_even - sum_odd
# The difference will be added
# in the last odd element
result[N - 2 ] + = diff
for i in range (N):
print (result[i], end = " " )
print ()
# Driver Code N = 8 ;
findSolution(N) # This code is contributed by divyamohan123 |
// C# implementation to find the // array containing same count of // even and odd elements with equal // sum of even and odd elements using System;
class GFG{
// Function to find the array such that // the array contains the same count // of even and odd elements with equal // sum of even and odd elements static void findSolution( int N)
{ // Length of array which is not
// divisible by 4 is unable to
// form such array
if (N % 4 != 0)
Console.Write(-1 + "\n" );
else
{
int temp = 0, sum_odd = 0;
int sum_even = 0;
int []result = new int [N];
// Loop to find the resulted
// array containing the same
// count of even and odd elements
for ( int i = 0; i < N; i += 2)
{
temp += 2;
result[i + 1] = temp;
// Find the total sum
// of even elements
sum_even += result[i + 1];
result[i] = temp - 1;
// Find the total sum
// of odd elements
sum_odd += result[i];
}
// Find the difference between the
// total sum of even and odd elements
int diff = sum_even - sum_odd;
// The difference will be added
// in the last odd element
result[N - 2] += diff;
for ( int i = 0; i < N; i++)
Console.Write(result[i] + " " );
Console.Write( "\n" );
}
} // Driver Code public static void Main(String[] args)
{ int N = 8;
findSolution(N);
} } // This code is contributed by Rohit_ranjan |
1 2 3 4 5 6 11 8
Performance Analysis:
- Time Complexity: O(N)
- Auxiliary Space: O(1)