XOR of all elements of array with set bits equal to K
Given an array of integers and a number K. The task is to find the XOR of only those elements of the array whose total set bits are equal to K.
Examples:
Input : arr[] = {1, 22, 3, 10}, K=1
Output : 1
Elements with set bits equal to 1 is 1.
So, XOR is also 1.
Input : arr[] = {3, 4, 10, 5, 8}, K=2
Output : 12
Approach:
- Initialize an empty vector.
- Traverse the array from left to right and check the set bits of each element.
- Use, C++ inbuilt function __builtin_popcount() to count setbits.
- Push the elements with K setbits into the vector.
- Finally find XOR of all the elements of the vector.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int xorGivenSetBits( int arr[], int n, int k)
{
vector< int > v;
for ( int i = 0; i < n; i++) {
if (__builtin_popcount(arr[i]) == k) {
v.push_back(arr[i]);
}
}
int result = v[0];
for ( int i = 1; i < v.size(); i++)
result = result ^ v[i];
return result;
}
int main()
{
int arr[] = { 2, 13, 1, 19, 7 };
int n = sizeof (arr) / sizeof (arr[0]);
int k = 3;
cout << xorGivenSetBits(arr, n, k);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static int xorGivenSetBits( int arr[],
int n, int k)
{
Vector<Integer> v = new Vector<>();
for ( int i = 0 ; i < n; i++)
{
if (Integer.bitCount(arr[i]) == k)
{
v.add(arr[i]);
}
}
int result = v.get( 0 );
for ( int i = 1 ; i < v.size(); i++)
{
result = result ^ v.get(i);
}
return result;
}
public static void main(String[] args)
{
int arr[] = { 2 , 13 , 1 , 19 , 7 };
int n = arr.length;
int k = 3 ;
System.out.println(xorGivenSetBits(arr, n, k));
}
}
|
Python3
def xorGivenSetBits(arr, n, k):
v = []
for i in range ( 0 , n, 1 ):
if ( bin (arr[i]).count( '1' ) = = k):
v.append(arr[i])
result = v[ 0 ]
for i in range ( 1 , len (v), 1 ):
result = result ^ v[i]
return result
if __name__ = = '__main__' :
arr = [ 2 , 13 , 1 , 19 , 7 ]
n = len (arr)
k = 3
print (xorGivenSetBits(arr, n, k))
|
C#
using System;
using System.Collections;
using System.Linq;
class GFG
{
static int xorGivenSetBits( int []arr, int n, int k)
{
ArrayList v= new ArrayList();
for ( int i = 0; i < n; i++)
{
if (Convert.ToString(arr[i], 2).Count(c => c == '1' ) == k)
{
v.Add(arr[i]);
}
}
int result = ( int )v[0];
for ( int i = 1; i < v.Count; i++)
result = result ^ ( int )v[i];
return result;
}
static void Main()
{
int []arr = { 2, 13, 1, 19, 7 };
int n = arr.Length;
int k = 3;
Console.WriteLine(xorGivenSetBits(arr, n, k));
}
}
|
Javascript
<script>
function xorGivenSetBits(arr, n, k)
{
let v = [];
for (let i = 0; i < n; i++) {
if (bitcount(arr[i]) == k) {
v.push(arr[i]);
}
}
let result = v[0];
for (let i = 1; i < v.length; i++)
result = result ^ v[i];
return result;
}
function bitcount(n)
{
var count = 0;
while (n)
{
count += n & 1;
n >>= 1;
}
return count;
}
let arr = [ 2, 13, 1, 19, 7 ];
let n = arr.length;
let k = 3;
document.write(xorGivenSetBits(arr, n, k));
</script>
|
Last Updated :
31 Jan, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...