Open In App

Minimum value to be added to maximize Bitwise XOR of the given array

Improve
Improve
Like Article
Like
Save
Share
Report

Given an array arr[] consisting of N integers, the task is to find an integer K, not having more than maximum bits present in any array element, which when added to the array, maximizes the Bitwise XOR of the array.

Examples:

Input: N = 7, arr[] = {1, 7, 8, 11, 6, 9, 6}
Output: 3
Explanation:
Bitwise XOR of the given array = 1 ^ 7 ^ 8 ^ 11 ^ 6 ^ 9 ^ 6 = 12
(12)2 = (1100)2
(0011)2 = (3)10 is the best option of maximizing XOR of the array.
Therefore, 12 ^ 3 = 15 is the maximum possible XOR of the given array.

Input: N = 5, arr[] = {1, 2, 3, 4, 5}
Output: 6
Explanation:
Bitwise XOR of the given array = 1 ^ 2 ^ 3 ^ 4 ^ 5 = 1
(1)2 = (0001)2
(0110)2 = (6)10 is the best option of maximizing XOR of the array.
Therefore, 1 ^ 6 = 7 is the maximum possible XOR of the given array.

 

Approach: Follow the steps below to solve the problem: 

  • Calculate the Bitwise XOR of all the elements of the array
  • Calculate the complement of calculated XOR of the array elements such that the number of bits in the complement is equal to the maximum bits present in any array element.
  • The complement of XOR is the required value to be added to maximize the Bitwise XOR of the given array.

Below is the implementation of the above approach:

C++




// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find complement of an integer
unsigned int onesComplement(unsigned int n,
                            int maxElement)
{
    // Count the number of bits of maxElement
    int bits = floor(log2(maxElement)) + 1;
 
    // Return 1's complement
    return ((1 << bits) - 1) ^ n;
}
 
// Function to find the value required to be
// added to maximize XOR of the given array
int findNumber(int arr[], int n)
{
    // Stores the required value
    // to be added to the array
    unsigned int res = 0;
 
    // Stores the maximum array element
    int maxElement = 0;
 
    // Traverse the array
    for (int i = 0; i < n; i++) {
 
        // Update XOR of the array
        res = res ^ arr[i];
 
        // Find maximum element in array
        if (maxElement < arr[i])
            maxElement = arr[i];
    }
 
    // Calculate 1s' complement
    res = onesComplement(res,
                         maxElement);
 
    // Return the answer
    return (res);
}
 
// Driver Code
int main()
{
    int arr[] = { 1, 2, 3, 4, 5 };
    int N = sizeof(arr) / sizeof(arr[0]);
    cout << findNumber(arr, N);
 
    return 0;
}


Java




// Java program for the above approach
import java.util.*;
import java.io.*;
import java.lang.*;
 
class GFG{
  
// Function to find complement of an integer
static int onesComplement(int n,
                          int maxElement)
{
     
    // Count the number of bits of maxElement
    int bits = (int)Math.floor((
                    Math.log(maxElement) /
                    Math.log(2))) + 1 ;
  
    // Return 1's complement
    return ((1 << bits) - 1) ^ n;
}
  
// Function to find the value required to be
// added to maximize XOR of the given array
static int findNumber(int arr[], int n)
{
     
    // Stores the required value
    // to be added to the array
    int res = 0;
  
    // Stores the maximum array element
    int maxElement = 0;
  
    // Traverse the array
    for(int i = 0; i < n; i++)
    {
         
        // Update XOR of the array
        res = res ^ arr[i];
  
        // Find maximum element in array
        if (maxElement < arr[i])
            maxElement = arr[i];
    }
  
    // Calculate 1s' complement
    res = onesComplement(res,
                         maxElement);
  
    // Return the answer
    return (res);
}
  
// Driver Code
public static void main(String[] args)
{
    int arr[] = { 1, 2, 3, 4, 5 };
    int N = arr.length;
     
    System.out.print(findNumber(arr, N));
}
}
 
// This code is contributed by sanjoy_62


Python3




# Python program for the above approach
import math
  
# Function to find complement of an integer
def onesComplement(n, maxElement) :
     
    # Count the number of bits of maxElement
    bits = math.floor(math.log2(maxElement)) + 1
  
    # Return 1's complement
    return ((1 << bits) - 1) ^ n
 
# Function to find the value required to be
# added to maximize XOR of the given array
def findNumber(arr, n) :
     
    # Stores the required value
    # to be added to the array
    res = 0
  
    # Stores the maximum array element
    maxElement = 0
  
    # Traverse the array
    for i in range(n):
  
        # Update XOR of the array
        res = res ^ arr[i]
  
        # Find maximum element in array
        if (maxElement < arr[i]):
            maxElement = arr[i]
     
    # Calculate 1s' complement
    res = onesComplement(res, maxElement)
  
    # Return the answer
    return (res)
  
# Driver Code
 
arr = [ 1, 2, 3, 4, 5 ]
N = len(arr)
print(findNumber(arr, N))
 
# This code is contributed by code_hunt.


C#




// C# program for the above approach
using System;
using System.Collections.Generic;
 
class GFG{
   
// Function to find complement of an integer
static int onesComplement(int n,
                          int maxElement)
{
     
    // Count the number of bits of maxElement
    int bits = (int)Math.Floor((
                    Math.Log(maxElement) /
                    Math.Log(2))) + 1 ;
   
    // Return 1's complement
    return ((1 << bits) - 1) ^ n;
}
   
// Function to find the value required to be
// added to maximize XOR of the given array
static int findNumber(int[] arr, int n)
{
     
    // Stores the required value
    // to be added to the array
    int res = 0;
   
    // Stores the maximum array element
    int maxElement = 0;
   
    // Traverse the array
    for(int i = 0; i < n; i++)
    {
         
        // Update XOR of the array
        res = res ^ arr[i];
   
        // Find maximum element in array
        if (maxElement < arr[i])
            maxElement = arr[i];
    }
   
    // Calculate 1s' complement
    res = onesComplement(res,
                         maxElement);
   
    // Return the answer
    return (res);
}
   
// Driver Code
public static void Main()
{
    int[] arr = { 1, 2, 3, 4, 5 };
    int N = arr.Length;
      
    Console.Write(findNumber(arr, N));
}
}
 
// This code is contributed by susmitakundugoaldanga


Javascript




<script>
 
// JavaScript program for above approach
 
// Function to find complement of an integer
function onesComplement(n,
                          maxElement)
{
      
    // Count the number of bits of maxElement
    let bits = Math.floor((
                    Math.log(maxElement) /
                    Math.log(2))) + 1 ;
   
    // Return 1's complement
    return ((1 << bits) - 1) ^ n;
}
   
// Function to find the value required to be
// added to maximize XOR of the given array
function findNumber(arr, n)
{
      
    // Stores the required value
    // to be added to the array
    let res = 0;
   
    // Stores the maximum array element
    let maxElement = 0;
   
    // Traverse the array
    for(let i = 0; i < n; i++)
    {
          
        // Update XOR of the array
        res = res ^ arr[i];
   
        // Find maximum element in array
        if (maxElement < arr[i])
            maxElement = arr[i];
    }
   
    // Calculate 1s' complement
    res = onesComplement(res,
                         maxElement);
   
    // Return the answer
    return (res);
}
 
// Driver Code
     let arr = [ 1, 2, 3, 4, 5 ];
    let N = arr.length;
      
    document.write(findNumber(arr, N));
 
// This code is contributed by avijitmondal1998.
</script>


Output: 

6

 

Time Complexity: O(N)
Auxiliary Space: O(1)



Last Updated : 13 Sep, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads