Given two arrays of N and M integers. The task is to find the number of unordered pairs formed of elements from both arrays in such a way that their sum is an odd number.
Note: An element can only be one pair.
Examples:
Input: a[] = {9, 14, 6, 2, 11}, b[] = {8, 4, 7, 20}
Output: 3
{9, 20}, {14, 7} and {11, 8}
Input: a[] = {2, 4, 6}, b[] = {8, 10, 12}
Output: 0
Approach: Count the number of odd and even numbers in both the arrays and the answer to the number of pairs will be min(odd1, even2) + min(odd2, even1), because odd + even is only odd.
Below is the implementation of the above approach:
// C++ program to implement // the above approach #include <bits/stdc++.h> using namespace std;
// Function that returns the number of pairs int count_pairs( int a[], int b[], int n, int m)
{ // Count of odd and even numbers
int odd1 = 0, even1 = 0;
int odd2 = 0, even2 = 0;
// Traverse in the first array
// and count the number of odd
// and even numbers in them
for ( int i = 0; i < n; i++) {
if (a[i] % 2)
odd1++;
else
even1++;
}
// Traverse in the second array
// and count the number of odd
// and even numbers in them
for ( int i = 0; i < m; i++) {
if (b[i] % 2)
odd2++;
else
even2++;
}
// Count the number of pairs
int pairs = min(odd1, even2) + min(odd2, even1);
// Return the number of pairs
return pairs;
} // Driver code int main()
{ int a[] = { 9, 14, 6, 2, 11 };
int b[] = { 8, 4, 7, 20 };
int n = sizeof (a) / sizeof (a[0]);
int m = sizeof (b) / sizeof (b[0]);
cout << count_pairs(a, b, n, m);
return 0;
} |
// Java program to implement // the above approach class GFG {
// Function that returns the number of pairs
static int count_pairs( int a[], int b[], int n, int m)
{
// Count of odd and even numbers
int odd1 = 0 , even1 = 0 ;
int odd2 = 0 , even2 = 0 ;
// Traverse in the first array
// and count the number of odd
// and even numbers in them
for ( int i = 0 ; i < n; i++) {
if (a[i] % 2 == 1 ) {
odd1++;
}
else {
even1++;
}
}
// Traverse in the second array
// and count the number of odd
// and even numbers in them
for ( int i = 0 ; i < m; i++) {
if (b[i] % 2 == 1 ) {
odd2++;
}
else {
even2++;
}
}
// Count the number of pairs
int pairs = Math.min(odd1, even2) + Math.min(odd2, even1);
// Return the number of pairs
return pairs;
}
// Driver code
public static void main(String[] args)
{
int a[] = { 9 , 14 , 6 , 2 , 11 };
int b[] = { 8 , 4 , 7 , 20 };
int n = a.length;
int m = b.length;
System.out.println(count_pairs(a, b, n, m));
}
} // This code contributed by Rajput-Ji |
# Python 3 program to implement # the above approach # Function that returns # the number of pairs def count_pairs(a, b, n, m):
# Count of odd and even numbers
odd1 = 0
even1 = 0
odd2 = 0
even2 = 0
# Traverse in the first array
# and count the number of odd
# and even numbers in them
for i in range (n):
if (a[i] % 2 ):
odd1 + = 1
else :
even1 + = 1
# Traverse in the second array
# and count the number of odd
# and even numbers in them
for i in range (m):
if (b[i] % 2 ):
odd2 + = 1
else :
even2 + = 1
# Count the number of pairs
pairs = ( min (odd1, even2) +
min (odd2, even1))
# Return the number of pairs
return pairs
# Driver code if __name__ = = '__main__' :
a = [ 9 , 14 , 6 , 2 , 11 ]
b = [ 8 , 4 , 7 , 20 ]
n = len (a)
m = len (b)
print (count_pairs(a, b, n, m))
# This code is contributed by # Surendra_Gangwar |
// C# program to implement // the above approach using System;
class GFG {
// Function that returns the number of pairs
static int count_pairs( int [] a, int [] b, int n, int m)
{
// Count of odd and even numbers
int odd1 = 0, even1 = 0;
int odd2 = 0, even2 = 0;
// Traverse in the first array
// and count the number of odd
// and even numbers in them
for ( int i = 0; i < n; i++) {
if (a[i] % 2 == 1) {
odd1++;
}
else {
even1++;
}
}
// Traverse in the second array
// and count the number of odd
// and even numbers in them
for ( int i = 0; i < m; i++) {
if (b[i] % 2 == 1) {
odd2++;
}
else {
even2++;
}
}
// Count the number of pairs
int pairs = Math.Min(odd1, even2) + Math.Min(odd2, even1);
// Return the number of pairs
return pairs;
}
// Driver code
static public void Main()
{
int [] a = { 9, 14, 6, 2, 11 };
int [] b = { 8, 4, 7, 20 };
int n = a.Length;
int m = b.Length;
Console.WriteLine(count_pairs(a, b, n, m));
}
} // This code contributed by ajit. |
<?php // PHP program to implement // the above approach // Function that returns the number of pairs function count_pairs( $a , $b , $n , $m )
{ // Count of odd and even numbers
$odd1 = 0; $even1 = 0;
$odd2 = 0; $even2 = 0;
// Traverse in the first array
// and count the number of odd
// and even numbers in them
for ( $i = 0; $i < $n ; $i ++)
{
if ( $a [ $i ] % 2)
$odd1 ++;
else
$even1 ++;
}
// Traverse in the second array
// and count the number of odd
// and even numbers in them
for ( $i = 0; $i < $m ; $i ++)
{
if ( $b [ $i ] % 2)
$odd2 ++;
else
$even2 ++;
}
// Count the number of pairs
$pairs = min( $odd1 , $even2 ) + min( $odd2 , $even1 );
// Return the number of pairs
return $pairs ;
} // Driver code
$a = array ( 9, 14, 6, 2, 11 );
$b = array ( 8, 4, 7, 20 );
$n = count ( $a ) ;
$m = count ( $b ) ;
echo count_pairs( $a , $b , $n , $m );
// This code is contributed by Ryuga
?> |
<script> // JavaScript program to implement // the above approach // Function that returns the number of pairs function count_pairs(a, b, n, m)
{ // Count of odd and even numbers
let odd1 = 0, even1 = 0;
let odd2 = 0, even2 = 0;
// Traverse in the first array
// and count the number of odd
// and even numbers in them
for (let i = 0; i < n; i++) {
if (a[i] % 2)
odd1++;
else
even1++;
}
// Traverse in the second array
// and count the number of odd
// and even numbers in them
for (let i = 0; i < m; i++) {
if (b[i] % 2)
odd2++;
else
even2++;
}
// Count the number of pairs
let pairs = Math.min(odd1, even2) + Math.min(odd2, even1);
// Return the number of pairs
return pairs;
} // Driver code let a = [ 9, 14, 6, 2, 11 ];
let b = [ 8, 4, 7, 20 ];
let n = a.length;
let m = b.length;
document.write(count_pairs(a, b, n, m));
// This code is contributed by Surbhi Tyagi. </script> |
3
Time Complexity: O(n + m)
Auxiliary Space: O(1)