Count pairs with Bitwise AND as ODD number
Last Updated :
21 Aug, 2022
Given an array of N integers. The task is to find the number of pairs (i, j) such that A[i] & A[j] is odd.
Examples:
Input: N = 4
A[] = { 5, 1, 3, 2 }
Output: 3
Since pair of A[] = ( 5, 1 ), ( 5, 3 ), ( 5, 2 ), ( 1, 3 ), ( 1, 2 ), ( 3, 2 )
5 AND 1 = 1, 5 AND 3 = 1, 5 AND 2 = 0,
1 AND 3 = 1, 1 AND 2 = 0,
3 AND 2 = 2
Total odd pair A( i, j ) = 3
Input : N = 6
A[] = { 5, 9, 0, 6, 7, 3 }
Output :6
Since pair of A[] =
( 5, 9 ) = 1, ( 5, 0 ) = 0, ( 5, 6 ) = 4, ( 5, 7 ) = 5, ( 5, 3 ) = 1,
( 9, 0 ) = 0, ( 9, 6 ) = 0, ( 9, 7 ) = 1, ( 9, 3 ) = 1,
( 0, 6 ) = 0, ( 0, 7 ) = 0, ( 0, 3 ) = 0,
( 6, 7 ) = 6, ( 6, 3 ) = 2,
( 7, 3 ) = 3
A naive approach is to check for every pair and print the count of pairs.
Below is the implementation of the above approach:
C++
#include <iostream>
using namespace std;
int findOddPair( int A[], int N)
{
int i, j;
int oddPair = 0;
for (i = 0; i < N; i++) {
for (j = i + 1; j < N; j++) {
if ((A[i] & A[j]) % 2 != 0)
oddPair++;
}
}
return oddPair;
}
int main()
{
int a[] = { 5, 1, 3, 2 };
int n = sizeof (a) / sizeof (a[0]);
cout << findOddPair(a, n) << endl;
return 0;
}
|
Java
class solution_1
{
static int findOddPair( int A[],
int N)
{
int i, j;
int oddPair = 0 ;
for (i = 0 ; i < N; i++)
{
for (j = i + 1 ; j < N; j++)
{
if ((A[i] & A[j]) % 2 != 0 )
oddPair++;
}
}
return oddPair;
}
public static void main(String args[])
{
int a[] = { 5 , 1 , 3 , 2 };
int n = a.length;
System.out.println(findOddPair(a, n));
}
}
|
Python
def findOddPair(A, N):
oddPair = 0
for i in range ( 0 , N - 1 ):
for j in range (i + 1 , N - 1 ):
if ((A[i] & A[j]) % 2 ! = 0 ):
oddPair = oddPair + 1
return oddPair
a = [ 5 , 1 , 3 , 2 ]
n = len (a)
print (findOddPair(a, n))
|
C#
using System;
class GFG
{
static int findOddPair( int []A,
int N)
{
int i, j;
int oddPair = 0;
for (i = 0; i < N; i++)
{
for (j = i + 1; j < N; j++)
{
if ((A[i] & A[j]) % 2 != 0)
oddPair++;
}
}
return oddPair;
}
public static void Main()
{
int []a = { 5, 1, 3, 2 };
int n = a.Length;
Console.WriteLine(findOddPair(a, n));
}
}
|
PHP
<?php
function findOddPair(& $A , $N )
{
$oddPair = 0;
for ( $i = 0; $i < $N ; $i ++)
{
for ( $j = $i + 1; $j < $N ; $j ++)
{
if (( $A [ $i ] & $A [ $j ]) % 2 != 0)
$oddPair = $oddPair + 1;
}
}
return $oddPair ;
}
$a = array (5, 1, 3, 2);
$n = sizeof( $a );
echo (findOddPair( $a , $n ));
?>
|
Javascript
<script>
function findOddPair(A, N)
{
var i, j;
var oddPair = 0;
for (i = 0; i < N; i++)
{
for (j = i + 1; j < N; j++)
{
if ((A[i] & A[j]) % 2 != 0)
oddPair++;
}
}
return oddPair;
}
var a = [ 5, 1, 3, 2 ];
var n = a.length;
document.write(findOddPair(a, n));
</script>
|
Time Complexity:O(N^2)
Auxiliary Space: O(1)
An efficient solution is to count the odd numbers. Then return count * (count – 1)/2 because AND of two numbers can be odd only if only if a pair of both numbers are odd.
C++
#include <iostream>
using namespace std;
int findOddPair( int A[], int N)
{
int count = 0;
for ( int i = 0; i < N; i++)
if ((A[i] % 2 == 1))
count++;
return count * (count - 1) / 2;
}
int main()
{
int a[] = { 5, 1, 3, 2 };
int n = sizeof (a) / sizeof (a[0]);
cout << findOddPair(a, n) << endl;
return 0;
}
|
Java
class solution_1
{
static int findOddPair( int A[],
int N)
{
int count = 0 ;
for ( int i = 0 ; i < N; i++)
if ((A[i] % 2 == 1 ))
count++;
return count * (count - 1 ) / 2 ;
}
public static void main(String args[])
{
int a[] = { 5 , 1 , 3 , 2 };
int n = a.length;
System.out.println(findOddPair(a, n));
}
}
|
Python
def findOddPair(A, N):
count = 0 ;
for i in range ( 0 , N - 1 ):
if ((A[i] % 2 = = 1 )):
count = count + 1
return count * (count - 1 ) / 2
a = [ 5 , 1 , 3 , 2 ]
n = len (a)
print ( int (findOddPair(a, n)))
|
C#
using System;
class GFG
{
public static int findOddPair( int [] A,
int N)
{
int count = 0;
for ( int i = 0; i < N; i++)
{
if ((A[i] % 2 == 1))
{
count++;
}
}
return count * (count - 1) / 2;
}
public static void Main( string [] args)
{
int [] a = new int [] {5, 1, 3, 2};
int n = a.Length;
Console.WriteLine(findOddPair(a, n));
}
}
|
PHP
<?php
function findOddPair(& $A , $N )
{
$count = 0;
for ( $i = 0; $i < $N ; $i ++)
if (( $A [ $i ] % 2 == 1))
$count ++;
return $count * ( $count - 1) / 2;
}
$a = array (5, 1, 3, 2 );
$n = sizeof( $a );
echo (findOddPair( $a , $n ));
?>
|
Javascript
<script>
function findOddPair( A, N)
{
let count = 0;
for (let i = 0; i < N; i++)
if ((A[i] % 2 == 1))
count++;
return count * (count - 1) / 2;
}
let a = [ 5, 1, 3, 2 ];
let n = a.length;
document.write(findOddPair(a, n));
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...