GeeksforGeeks App
Open App
Browser
Continue

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

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 ``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

 ``

Output:

`6`

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

My Personal Notes arrow_drop_up