📖 Scenario: Imagine you have a list of product IDs scanned multiple times in a warehouse. Most products appear twice, but two products were scanned only once by mistake. You want to find those two unique product IDs.
🎯 Goal: Build a program that finds the two unique numbers in an array where every other number appears twice, using XOR operations.
📋 What You'll Learn
Create an array called products with the exact values: [4, 1, 2, 1, 2, 5]
Create a variable called xorAll and set it to 0
Use a for loop with variable num to XOR all elements in products and store in xorAll
Find the rightmost set bit in xorAll and store it in a variable called rightmostSetBit
Create two variables num1 and num2 and set both to 0
Use a for loop with variable num to divide products into two groups based on rightmostSetBit and XOR separately 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 large datasets where duplicates exist, such as error detection in inventory or logs.
💼 Career
Bitwise operations and XOR are common in low-level programming, embedded systems, and optimizing algorithms for performance.
Progress0 / 4 steps
1
Create the array of product IDs
Create an array called products with these exact values: [4, 1, 2, 1, 2, 5]
DSA Javascript
Hint
Use const products = [4, 1, 2, 1, 2, 5]; to create the array.
2
Calculate XOR of all elements
Create a variable called xorAll and set it to 0. Then use a for loop with variable num to XOR all elements in products and store the result in xorAll.
DSA Javascript
Hint
Start with let xorAll = 0; and XOR each number in the array using a for...of loop.
3
Find rightmost set bit and separate groups
Find the rightmost set bit in xorAll and store it in rightmostSetBit using xorAll & (-xorAll). Then create two variables num1 and num2 set to 0. Use a for loop with variable num to XOR numbers in products into num1 if they have the set bit, else into num2.
DSA Javascript
Hint
Use const rightmostSetBit = xorAll & (-xorAll); to find the bit. Then separate numbers into two groups and XOR them.
4
Print the two unique numbers
Print the two unique numbers num1 and num2 separated by a space using console.log(num1 + ' ' + num2).
DSA Javascript
Hint
Use console.log(num1 + ' ' + num2); to print the two unique numbers separated by a space.
Practice
(1/5)
1. What is the main purpose of using XOR operation to find two non-repeating elements in an array?
easy
A. To cancel out all repeating elements and isolate the unique ones
B. To sort the array in ascending order
C. To count the total number of elements in the array
D. To reverse the array elements
Solution
Step 1: Understand XOR behavior with duplicates
XOR of two identical numbers is 0, so repeating elements cancel out.
Step 2: Isolate unique elements using XOR
XOR of all elements leaves XOR of two unique elements, isolating them.
Final Answer:
To cancel out all repeating elements and isolate the unique ones -> Option A
Quick Check:
XOR cancels duplicates = isolate unique elements [OK]
Hint: XOR cancels pairs, leaving only unique elements [OK]
Common Mistakes:
Thinking XOR sorts the array
Using XOR to count elements
Assuming XOR reverses arrays
2. Which of the following JavaScript code snippets correctly initializes the XOR variable to find two non-repeating elements?
easy
A. let xor = null;
B. let xor = 1;
C. let xor = 0;
D. let xor = undefined;
Solution
Step 1: Understand XOR identity element
XOR with 0 returns the other number unchanged, so start with 0.
Step 2: Initialize XOR variable correctly
Initialize xor as 0 to accumulate XOR of all elements properly.
Final Answer:
let xor = 0; -> Option C
Quick Check:
Start XOR with 0 for correct accumulation [OK]
Hint: Initialize XOR with 0, not 1 or null [OK]
Common Mistakes:
Starting XOR with 1 changes results
Using null or undefined causes errors
Not initializing XOR variable
3. What will be the output of the following JavaScript code?
const arr = [2, 3, 7, 9, 2, 3];
let xor = 0;
for (const num of arr) {
xor ^= num;
}
console.log(xor);
4. Identify the error in the following code snippet that attempts to find two non-repeating elements using XOR:
const arr = [4, 1, 2, 1, 2, 5];
let xor = 0;
for (let i = 0; i <= arr.length; i++) {
xor ^= arr[i];
}
console.log(xor);
medium
A. Use let xor = null instead of 0
B. Loop condition should be i < arr.length, not i <= arr.length
C. Array elements should be sorted before XOR
D. XOR should start from 1, not 0
Solution
Step 1: Check loop boundary condition
The loop runs from i=0 to i<=arr.length, which accesses arr[arr.length] (undefined).
Step 2: Correct loop condition
Change condition to i < arr.length to avoid accessing undefined and runtime error.
Final Answer:
Loop condition should be i < arr.length, not i <= arr.length -> Option B
Quick Check:
Loop must stay within array bounds [OK]
Hint: Use i < arr.length to avoid out-of-bounds errors [OK]
Common Mistakes:
Using <= instead of < in loop
Starting XOR with 1 instead of 0
Sorting array unnecessarily
5. Given the array [6, 1, 3, 6, 1, 5], which two numbers are the non-repeating elements found using the XOR method? Choose the correct pair.
hard
A. [3, 5]
B. [6, 1]
C. [1, 3]
D. [5, 6]
Solution
Step 1: XOR all elements to get xor of two unique numbers
6^1=7, 7^3=4, 4^6=2, 2^1=3, 3^5=6 (xor = 6).
Step 2: Find rightmost set bit and separate elements
Rightmost set bit in 6 (binary 110) is bit 2 (value 2). Separate elements into two groups based on this bit and XOR each group to find unique numbers 3 and 5.
Final Answer:
[3, 5] -> Option A
Quick Check:
Unique elements are 3 and 5 [OK]
Hint: Use rightmost set bit to split and find unique numbers [OK]
Common Mistakes:
Mixing up repeating and unique elements
Not splitting array by set bit
Incorrect XOR calculations
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.