Open In App
Related Articles

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

Improve Article
Improve
Save Article
Save
Like Article
Like

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)


Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!

Last Updated : 11 Jun, 2021
Like Article
Save Article
Previous
Next
Similar Reads
Complete Tutorials