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> |
6
Time Complexity: O(N)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!