Find the missing number in the sequence

advertisements

This question already has an answer here:

  • Easy interview question got harder: given numbers 1..100, find the missing number(s) 43 answers

I have been given a list of n integers and these integers are in the range of 1 to n. There are no duplicates in list.But one of the integers is missing in the list.I have to find the missing integer.

Example: If n=8
I/P    [7,2,6,5,3,1,8]
O/P    4

I am using a simple concept to find the missing number which is to get the
sum of numbers
       total = n*(n+1)/2
And then Subtract all the numbers from sum.

But the above method will fail if the sum of the numbers goes beyond maximum allowed integer.

So i searched for a second solution and i found a method as follows:

 1) XOR all the elements present in arr[], let the result of XOR be R1.
 2) XOR all numbers from 1 to n, let XOR be R2.
 3) XOR of R1 and R2 gives the missing number.

How is this method working?..How is the XOR of R1 and R2 finds the missing integer in the above case?


To answer your question , you just have to remember that

A XOR B = C => C XOR A = B

and it immediately follows that

(PARTIAL SUM) XOR (MISSING ELEMENT) = (TOTAL) =>
(TOTAL) XOR ( PATIAL SUM) = (MISSING ELEMNT)

To prove the first property, just write down the XOR truth table:

A B | A XOR B
0 0 | 0
0 1 | 1
1 0 | 1
1 1 | 0

Truth table in short : if both the bits are same, result of XOR is false, true otherwise.

On an unrelated note, this property of XOR makes it a nice candidate for simple ( but not trivial ) forms of encryption.