Skip to content
Related Articles

Related Articles

Improve Article

Construct original array starting with K from an array of XOR of all elements except elements at same index

  • Last Updated : 11 Jun, 2021

Given an array A[] consisting of N integers and first element of the array B[] as K, the task is to construct the array B[] from A[] such that for any index i, A[i] is the Bitwise XOR of all the array elements of B[] except B[i].

Examples:

Input: A[] = {13, 14, 10, 6}, K = 2
Output: 2 1 5 9
Explanation:
For any index i, A[i] is the Bitwise XOR of all elements of B[] except B[i]. 

  1. B[1] ^ B[2] ^ B[3] = 1 ^ 5 ^ 9 = 13 = A[0]
  2. B[0] ^ B[2] ^ B[3] = 2 ^ 5 ^ 9 = 14 = A[1]
  3. B[0] ^ B[1] ^ B[3] = 2 ^ 1 ^ 9 = 10 = A[2]
  4. B[0] ^ B[1] ^ B[2] = 2 ^ 1 ^ 5 = 6 = A[3]

Input: A[] = {3, 5, 0, 2, 4}, K = 2
Output: 2 4 1 3 5

 

Approach: The idea is based on the observation that Bitwise XOR of the same value calculated even number of times is 0.



For any index i, 
A[i] = B[0] ^ B[1] ^ … B[i-1] ^ B[i+1] ^ … B[n-1] 
Therefore, XOR of all elements of B[], totalXor = B[0] ^ B[1] ^ … B[i – 1] ^ B[i] ^ B[i + 1] ^ … ^ B[N – 1].
Therefore, B[i] = totalXor ^ A[i]. (Since every element occurs twice except B[i])

Follow the below steps to solve the problem:

Below is the implementation of the above approach:

C++




// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to construct an array
// with each element equal to XOR
// of all array elements except
// the element at the same index
void constructArray(int A[], int N,
                    int K)
{
    // Original array
    int B[N];
 
    // Stores Bitwise XOR of array
    int totalXOR = A[0] ^ K;
 
    // Calculate XOR of all array elements
    for (int i = 0; i < N; i++)
        B[i] = totalXOR ^ A[i];
 
    // Print the original array B[]
    for (int i = 0; i < N; i++) {
        cout << B[i] << " ";
    }
}
 
// Driver Code
int main()
{
    int A[] = { 13, 14, 10, 6 }, K = 2;
    int N = sizeof(A) / sizeof(A[0]);
 
    // Function Call
    constructArray(A, N, K);
 
    return 0;
}

Java




// Java program for the above approach
class GFG{
     
// Function to construct an array
// with each element equal to XOR
// of all array elements except
// the element at the same index
static void constructArray(int A[], int N,
                           int K)
{
     
    // Original array
    int B[] = new int[N];
   
    // Stores Bitwise XOR of array
    int totalXOR = A[0] ^ K;
   
    // Calculate XOR of all array elements
    for(int i = 0; i < N; i++)
        B[i] = totalXOR ^ A[i];
   
    // Print the original array B[]
    for(int i = 0; i < N; i++)
    {
        System.out.print(B[i] + " ");
    }
}
 
// Driver Code
public static void main(String[] args)
{
    int A[] = { 13, 14, 10, 6 }, K = 2;
    int N = A.length;
     
    // Function Call
    constructArray(A, N, K);
}
}
 
// This code is contributed by divyeshrabadiya07

Python3




# Python program for the above approach
 
# Function to construct an array
# with each element equal to XOR
# of all array elements except
# the element at the same index
def constructArray(A, N, K):
   
    # Original array
    B = [0] * N;
 
    # Stores Bitwise XOR of array
    totalXOR = A[0] ^ K;
 
    # Calculate XOR of all array elements
    for i in range(N):
        B[i] = totalXOR ^ A[i];
 
    # Print the original array B
    for i in range(N):
        print(B[i], end = " ");
 
# Driver Code
if __name__ == '__main__':
    A = [13, 14, 10, 6];
    K = 2;
    N = len(A);
 
    # Function Call
    constructArray(A, N, K);
 
# This code is contributed by Princi Singh

C#




// C# program for the above approach
using System;
using System.Collections;
class GFG {
     
    // Function to construct an array
    // with each element equal to XOR
    // of all array elements except
    // the element at the same index
    static void constructArray(int[] A, int N,
                               int K)
    {
          
        // Original array
        int[] B = new int[N];
        
        // Stores Bitwise XOR of array
        int totalXOR = A[0] ^ K;
        
        // Calculate XOR of all array elements
        for(int i = 0; i < N; i++)
            B[i] = totalXOR ^ A[i];
        
        // Print the original array B[]
        for(int i = 0; i < N; i++)
        {
            Console.Write(B[i] + " ");
        }
    }
 
  static void Main() {
    int[] A = { 13, 14, 10, 6 };
    int K = 2;
    int N = A.Length;
      
    // Function Call
    constructArray(A, N, K);
  }
}
 
// This code is contributed by divyesh072019

Javascript




<script>
 
// JavaScript program for the above approach
 
// Function to construct an array
// with each element equal to XOR
// of all array elements except
// the element at the same index
function constructArray(A, N, K)
{
    // Original array
    let B = new Array(N);
 
    // Stores Bitwise XOR of array
    let totalXOR = A[0] ^ K;
 
    // Calculate XOR of all array elements
    for (let i = 0; i < N; i++)
        B[i] = totalXOR ^ A[i];
 
    // Print the original array B[]
    for (let i = 0; i < N; i++) {
        document.write(B[i] + " ");
    }
}
 
// Driver Code
    let A = [ 13, 14, 10, 6 ], K = 2;
    let N = A.length;
 
    // Function Call
    constructArray(A, N, K);
 
// This code is contributed by Surbhi Tyagi.
 
</script>
Output: 
2 1 5 9

 

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

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :