# Count of odd and even sum pairs in an array

Given an array arr[] of N positive integers, the task is to find the number of pairs with odd sum and the number of pairs with even sum.

Examples:

Input: arr[] = {1, 2, 3, 4, 5}
Output:
Odd pairs = 6
Even pairs = 4

Input: arr[] = {7, 4, 3, 2}
Output:
Odd pairs = 4
Even pairs = 2

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Naive Approach:
The naive approach for this problem is to go through every pair of elements in the array, check for their sums and then count the number of pairs having odd and even sum. This approach will take O(N*N) time.

Efficient Approach:

• Count the number of odd and even elements from the array and store them in variables cntEven and cntOdd.
• In order to get the pair sum as even, all the even elements will be paired with only even elements and all the odd elements will be paired with only odd elements and the count will be ((cntEven * (cntEven – 1)) / 2) + ((cntOdd * (cntOdd – 1)) / 2)
• Now, for the sum to be odd, one of the elements of the pair must be even and the other must be odd and the required count will be cntEven * cntOdd.

Below is the implementation of the above approach:

 // C++ implementation of the approach #include using namespace std;    // Function to find the count of pairs // with odd sum and the count // of pairs with even sum void findPairs(int arr[], int n) {        // To store the count of even and     // odd number from the array     int cntEven = 0, cntOdd = 0;        for (int i = 0; i < n; i++) {            // If the current element is even         if (arr[i] % 2 == 0)             cntEven++;            // If it is odd         else             cntOdd++;     }        // To store the count of     // pairs with even sum     int evenPairs = 0;        // All the even elements will make     // pairs with each other and the     // sum of the pair will be even     evenPairs += ((cntEven * (cntEven - 1)) / 2);        // All the odd elements will make     // pairs with each other and the     // sum of the pair will be even     evenPairs += ((cntOdd * (cntOdd - 1)) / 2);        // To store the count of     // pairs with odd sum     int oddPairs = 0;        // All the even elements will make pairs     // with all the odd element and the     // sum of the pair will be odd     oddPairs += (cntEven * cntOdd);        cout << "Odd pairs = " << oddPairs << endl;     cout << "Even pairs = " << evenPairs; }    // Driver code int main() {     int arr[] = { 1, 2, 3, 4, 5 };     int n = sizeof(arr) / sizeof(int);        findPairs(arr, n);        return 0; }

 // Java implementation of the approach class GFG  {    // Function to find the count of pairs // with odd sum and the count // of pairs with even sum static void findPairs(int arr[], int n) {        // To store the count of even and     // odd number from the array     int cntEven = 0, cntOdd = 0;        for (int i = 0; i < n; i++)     {            // If the current element is even         if (arr[i] % 2 == 0)             cntEven++;            // If it is odd         else             cntOdd++;     }        // To store the count of     // pairs with even sum     int evenPairs = 0;        // All the even elements will make     // pairs with each other and the     // sum of the pair will be even     evenPairs += ((cntEven * (cntEven - 1)) / 2);        // All the odd elements will make     // pairs with each other and the     // sum of the pair will be even     evenPairs += ((cntOdd * (cntOdd - 1)) / 2);        // To store the count of     // pairs with odd sum     int oddPairs = 0;        // All the even elements will make pairs     // with all the odd element and the     // sum of the pair will be odd     oddPairs += (cntEven * cntOdd);        System.out.println("Odd pairs = " + oddPairs);     System.out.println("Even pairs = " + evenPairs); }    // Driver code public static void main(String[] args)  {     int arr[] = { 1, 2, 3, 4, 5 };     int n = arr.length;        findPairs(arr, n); } }    // This code is contributed by Rajput-Ji

 # Python3 implementation of the approach     # Function to find the count of pairs  # with odd sum and the count  # of pairs with even sum  def findPairs(arr, n) :         # To store the count of even and      # odd number from the array      cntEven = 0; cntOdd = 0;         for i in range(n) :             # If the current element is even          if (arr[i] % 2 == 0) :             cntEven += 1;             # If it is odd          else :             cntOdd += 1;         # To store the count of      # pairs with even sum      evenPairs = 0;         # All the even elements will make      # pairs with each other and the      # sum of the pair will be even      evenPairs += ((cntEven * (cntEven - 1)) // 2);         # All the odd elements will make      # pairs with each other and the      # sum of the pair will be even      evenPairs += ((cntOdd * (cntOdd - 1)) // 2);         # To store the count of      # pairs with odd sum      oddPairs = 0;         # All the even elements will make pairs      # with all the odd element and the      # sum of the pair will be odd      oddPairs += (cntEven * cntOdd);         print("Odd pairs = ", oddPairs);      print("Even pairs = ", evenPairs);     # Driver code  if __name__ == "__main__" :         arr = [ 1, 2, 3, 4, 5 ];      n = len(arr);         findPairs(arr, n);     # This code is contributed by kanugargng

 // C# implementation of the approach using System;    class GFG  {    // Function to find the count of pairs // with odd sum and the count // of pairs with even sum static void findPairs(int []arr, int n) {        // To store the count of even and     // odd number from the array     int cntEven = 0, cntOdd = 0;        for (int i = 0; i < n; i++)     {            // If the current element is even         if (arr[i] % 2 == 0)             cntEven++;            // If it is odd         else             cntOdd++;     }        // To store the count of     // pairs with even sum     int evenPairs = 0;        // All the even elements will make     // pairs with each other and the     // sum of the pair will be even     evenPairs += ((cntEven * (cntEven - 1)) / 2);        // All the odd elements will make     // pairs with each other and the     // sum of the pair will be even     evenPairs += ((cntOdd * (cntOdd - 1)) / 2);        // To store the count of     // pairs with odd sum     int oddPairs = 0;        // All the even elements will make pairs     // with all the odd element and the     // sum of the pair will be odd     oddPairs += (cntEven * cntOdd);        Console.WriteLine("Odd pairs = " + oddPairs);     Console.WriteLine("Even pairs = " + evenPairs); }    // Driver code public static void Main(String[] args)  {     int []arr = { 1, 2, 3, 4, 5 };     int n = arr.Length;        findPairs(arr, n); } }    // This code is contributed by Rajput-Ji

Output:
Odd pairs = 6
Even pairs = 4

Complexity Analysis:

• Time Complexity : O(N).
In every iteration of for loop, an element from either of the array is processed. Therefore, the time complexity is O(N).
• Auxiliary Space : O(1).
Any extra space is not required, so the space complexity is constant.

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : Rajput-Ji, kanugargng, muskan_garg

Article Tags :
Practice Tags :