Open In App

Generate an array of given size with equal count and sum of odd and even numbers

Last Updated : 01 Nov, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

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) = 6
Input: 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 an array which is a multiple of 4 can form an array with an 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++




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




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




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




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

    
    

    Javascript




    <script>
     
    // JavaScript 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
    function findSolution(N)
    {
     
        // Length of array which is not
        // divisible by 4 is unable to
        // form such array
        if (N % 4 != 0)
            document.write(-1 + "<br>");
        else {
            let temp = 0, sum_odd = 0,
                sum_even = 0;
            let result = new Uint8Array(N);
     
            // Loop to find the resulted
            // array containing the same
            // count of even and odd elements
            for (let 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
            let diff = sum_even - sum_odd;
     
            // The difference will be added
            // in the last odd element
            result[N - 2] += diff;
     
            for (let i = 0; i < N; i++)
                document.write(result[i] + " ");
            document.write("<br>");
        }
    }
     
    // Driver Code
        let N = 8;
        findSolution(N);
     
     
     
    // This code is contributed by Surbhi Tyagi.
    </script>

    
    

  • Output

    1 2 3 4 5 6 11 8
    
  • Performance Analysis: 
     
    • Time Complexity: O(N)
    • Auxiliary Space: O(1)
  •  


Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads