Bird
Raised Fist0
DSA C++programming~30 mins

Two Non Repeating Elements in Array Using XOR in DSA C++ - Build from Scratch

Choose your learning style10 modes available
Two Non Repeating Elements in Array Using XOR
📖 Scenario: Imagine you have a list of numbers where every number appears twice except for two unique numbers that appear only once. You want to find those two unique numbers efficiently.
🎯 Goal: Build a C++ program that finds the two unique numbers in an array where every other number repeats twice, using XOR operations.
📋 What You'll Learn
Create an integer array called arr with the exact values: 2, 3, 7, 9, 2, 3
Create an integer variable called xor_all and initialize it to 0
Use a for loop with variable num to XOR all elements of arr into xor_all
Find the rightmost set bit of xor_all and store it in set_bit
Create two integer variables num1 and num2 initialized to 0
Use a for loop with variable num to separate elements of arr into two groups based on set_bit and XOR them into num1 and num2
Print the two unique numbers num1 and num2 separated by a space
💡 Why This Matters
🌍 Real World
Finding unique items in data streams or logs where duplicates are common, such as detecting unique error codes or unique user IDs.
💼 Career
Bitwise operations and XOR tricks are common in coding interviews and help optimize solutions for problems involving duplicates and unique elements.
Progress0 / 4 steps
1
Create the array with given numbers
Create an integer array called arr with the exact values: 2, 3, 7, 9, 2, 3
DSA C++
Hint

Use C++ array initialization syntax with the exact numbers given.

2
Initialize XOR accumulator variable
Create an integer variable called xor_all and initialize it to 0
DSA C++
Hint

Declare an integer variable named xor_all and set it to zero.

3
XOR all elements to find combined XOR
Use a for loop with variable num to XOR all elements of arr into xor_all
DSA C++
Hint

Use a range-based for loop to XOR each number with xor_all.

4
Find the two unique numbers and print them
Find the rightmost set bit of xor_all and store it in set_bit. Create two integer variables num1 and num2 initialized to 0. Use a for loop with variable num to separate elements of arr into two groups based on set_bit and XOR them into num1 and num2. Finally, print num1 and num2 separated by a space.
DSA C++
Hint

Use bitwise AND with negative xor_all to find the rightmost set bit. Then separate numbers into two groups and XOR each group. Print the two unique numbers.

Practice

(1/5)
1. What is the main idea behind using XOR to find two non-repeating elements in an array where every other element repeats?
easy
A. XOR counts the frequency of each element
B. XOR sorts the array to separate unique elements
C. XOR of all elements gives XOR of the two unique elements
D. XOR swaps the two unique elements in the array

Solution

  1. Step 1: Understand XOR properties

    XOR of a number with itself is 0, and XOR with 0 is the number itself.
  2. Step 2: Apply XOR to all elements

    XORing all elements cancels out repeating elements, leaving XOR of two unique elements.
  3. Final Answer:

    XOR of all elements gives XOR of the two unique elements -> Option C
  4. Quick Check:

    XOR cancels duplicates, leaving unique pair XOR [OK]
Hint: XOR all elements to isolate unique pair XOR result [OK]
Common Mistakes:
  • Thinking XOR sorts or counts elements
  • Assuming XOR gives unique elements directly
  • Confusing XOR with addition or subtraction
2. Which of the following C++ code snippets correctly initializes the XOR variable to find two unique elements in an array arr of size n?
easy
A. int xorVal = 0; for(int i = 1; i <= n; i++) xorVal ^= arr[i];
B. int xorVal = 0; for(int i = 0; i < n; i++) xorVal ^= arr[i];
C. int xorVal = 1; for(int i = 0; i < n; i++) xorVal ^= arr[i];
D. int xorVal = arr[0]; for(int i = 1; i < n; i++) xorVal += arr[i];

Solution

  1. Step 1: Initialize XOR with 0

    Start with 0 because XOR with 0 returns the number itself.
  2. Step 2: Loop through array correctly

    Loop from 0 to n-1 to cover all elements; use XOR assignment operator ^=.
  3. Final Answer:

    int xorVal = 0; for(int i = 0; i < n; i++) xorVal ^= arr[i]; -> Option B
  4. Quick Check:

    Correct loop and XOR initialization [OK]
Hint: Initialize XOR with 0 and loop from 0 to n-1 [OK]
Common Mistakes:
  • Starting loop from 1 and missing first element
  • Using addition instead of XOR
  • Initializing XOR with 1 instead of 0
  • Looping out of array bounds
3. What will be the output of the following C++ code snippet?
int arr[] = {2, 3, 7, 9, 2, 3};
int n = 6;
int xorVal = 0;
for(int i = 0; i < n; i++) {
    xorVal ^= arr[i];
}
std::cout << xorVal << std::endl;
medium
A. 14
B. 9
C. 7
D. 0

Solution

  1. Step 1: XOR all elements

    Calculate XOR stepwise: 0^2=2, 2^3=1, 1^7=6, 6^9=15, 15^2=13, 13^3=14.
  2. Step 2: Result is XOR of two unique elements

    Since 2 and 3 repeat, XOR leaves 7 and 9 combined as 14.
  3. Final Answer:

    14 -> Option A
  4. Quick Check:

    XOR of unique pair (7^9) = 14 [OK]
Hint: XOR duplicates cancel; result is XOR of unique elements [OK]
Common Mistakes:
  • Calculating XOR incorrectly stepwise
  • Assuming output is one unique element
  • Confusing XOR with sum
4. Identify the error in the following code snippet that attempts to find two non-repeating elements using XOR:
int xorVal = 0;
for(int i = 0; i <= n; i++) {
    xorVal ^= arr[i];
}
medium
A. Loop runs out of array bounds causing runtime error
B. XOR operator is used incorrectly
C. xorVal should be initialized with arr[0]
D. Loop should start from 1 instead of 0

Solution

  1. Step 1: Check loop bounds

    Loop runs from i=0 to i<=n, which means i goes up to n, exceeding array index (0 to n-1).
  2. Step 2: Consequence of out-of-bounds access

    Accessing arr[n] causes undefined behavior or runtime error.
  3. Final Answer:

    Loop runs out of array bounds causing runtime error -> Option A
  4. Quick Check:

    Array index must be less than n [OK]
Hint: Use i < n in loops to avoid out-of-bounds [OK]
Common Mistakes:
  • Using <= instead of < in loop condition
  • Initializing xorVal incorrectly
  • Starting loop from wrong index
5. Given the array arr = {4, 1, 2, 1, 2, 5}, which of the following steps correctly finds the two non-repeating elements using XOR?
hard
A. Add all elements and subtract twice the sum of repeating elements
B. Sort array, then pick first two elements as unique
C. XOR all elements to get 1, then XOR with 0 to get unique elements
D. XOR all elements to get 1, find rightmost set bit, partition array by this bit, XOR partitions separately

Solution

  1. Step 1: XOR all elements

    XOR(4^1^2^1^2^5) = 4 ^ (1^1) ^ (2^2) ^ 5 = 4 ^ 0 ^ 0 ^ 5 = 1.
  2. Step 2: Find rightmost set bit of XOR result

    Rightmost set bit of 1 is 1 (binary 0001).
  3. Step 3: Partition array by this bit and XOR separately

    Group elements with this bit set and not set, XOR each group to find unique elements 4 and 5.
  4. Final Answer:

    XOR all elements to get 1, find rightmost set bit, partition array by this bit, XOR partitions separately -> Option D
  5. Quick Check:

    Partitioning by set bit isolates unique elements [OK]
Hint: Use rightmost set bit to split and XOR partitions [OK]
Common Mistakes:
  • Skipping partition step after XOR
  • Using sorting instead of XOR
  • Confusing addition with XOR
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard