Skip to content
Related Articles

Related Articles

Improve Article

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

  • Difficulty Level : Medium
  • Last Updated : 10 May, 2021

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] *
      
            # 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)

     




    My Personal Notes arrow_drop_up
Recommended Articles
Page :