- Given an array containing n-1 distinct positive numbers range from 1 to n.
- e.g suppose n = 5, array will contain 4 unique (or no duplicate) numbers.
- some of the possible array values are
- int elements[] = { 1, 3, 2, 5 }
- Missing number is 4
- int elements1[] = { 1, 2, 4, 5 }
- Missing number is 3
- int elements2[] = { 4, 3, 2, 1 }
- Missing number is 5
- e.g suppose n = 5, array will contain 4 unique (or no duplicate) numbers.
- We would like to find out the missing number in an array.
- We will discuss couple of methods to find out the missing number
Method 1: find a missing number in an integer array using Sum (java)
- Calculate the sum of n numbers ( 1 to n).
- Sum = n * (n + 1) /2, say sumOfNumbers
- Calculate the sum of all elements of input array, say arraySum
- MissingNumber = sumOfNumbers – arraySum
Program: find a missing number using sum formula in java
private static int missingNumberUsingSum( int [] elements) { int arraySum = 0 ; // Sum of array for ( int element : elements) { arraySum += element; } // sum of number from 1 to n int n = elements.length + 1 ; // as one number is missing int sumOfNumbers = (n * (n + 1 )) / 2 ; return sumOfNumbers - arraySum; } |
Method 2: find a missing number in an integer array using XOR in java
- We will use the properties of XOR gate.
- Truth table of “Exclusive-OR” or XOR gate is :
X | Y | Output |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
- Let us apply XOR gate on elements[] = { 1, 3, 2, 5 }
- Calculate XOR of n numbers i.e. 1 to 5 and elements of array
- Missing Number = (1 ^ 2 ^ 3 ^ 4 ^ 5) ^ (1 ^ 3 ^ 2 ^ 5)
- We know XOR (P,P) = 0, let us rearrange same numbers
- i.e. (1 ^ 1) ^ ( 2 ^ 2) ^ (3 ^ 3) ^ (4) ^ (5 ^ 5)
- MissingNumber will be 4.
Program: find a missing number in an integer array using XOR in java
private static int missingNumberUsingXOR( int [] elements) { int n = elements.length + 1 ; int missingNumber = elements[ 0 ]; for ( int index = 1 ; index <= n; index++) { if (index < elements.length) { missingNumber ^= elements[index]; } missingNumber ^= index; } return missingNumber; } |
Complete program: find a missing number in an integer array (Sum & XOR)
package org.learn.arrays; import java.util.Arrays; public class MissingNumber { public static void main(String[] args) { int elements[] = { 1 , 6 , 3 , 2 , 7 , 5 }; String array = Arrays.toString(elements); int missingNumber = missingNumberUsingSum(elements); System.out.printf( "1. Missing number in %s using sum is: %d" , array, missingNumber); missingNumber = missingNumberUsingXOR(elements); System.out.printf( "\n2. Missing number in %s using XOR is: %d" , array, missingNumber); int elements1[] = { 1 , 2 , 4 , 5 , 6 , 7 }; array = Arrays.toString(elements1); missingNumber = missingNumberUsingSum(elements1); System.out.printf( "\n3. Missing number in %s using sum is: %d" , array, missingNumber); missingNumber = missingNumberUsingXOR(elements1); System.out.printf( "\n4. Missing number in %s using XOR is: %d" , array, missingNumber); int elements2[] = { 7 , 6 , 4 , 3 , 2 , 1 }; array = Arrays.toString(elements2); missingNumber = missingNumberUsingSum(elements2); System.out.printf( "\n5. Missing number in %s using sum is: %d" , array, missingNumber); missingNumber = missingNumberUsingXOR(elements2); System.out.printf( "\n6. Missing number in %s using XOR is: %d" , array, missingNumber); } private static int missingNumberUsingXOR( int [] elements) { int n = elements.length + 1 ; int missingNumber = elements[ 0 ]; for ( int index = 1 ; index <= n; index++) { if (index < elements.length) { missingNumber ^= elements[index]; } missingNumber ^= index; } return missingNumber; } private static int missingNumberUsingSum( int [] elements) { int arraySum = 0 ; // Sum of array for ( int element : elements) { arraySum += element; } // sum of number from 1 to n int n = elements.length + 1 ; // as one number is missing int sumOfNumbers = (n * (n + 1 )) / 2 ; return sumOfNumbers - arraySum; } } |
Output: find missing number in an array of distinct integers
1. Missing number in [1, 6, 3, 2, 7, 5] using sum is: 4 2. Missing number in [1, 6, 3, 2, 7, 5] using XOR is: 4 3. Missing number in [1, 2, 4, 5, 6, 7] using sum is: 3 4. Missing number in [1, 2, 4, 5, 6, 7] using XOR is: 3 5. Missing number in [7, 6, 4, 3, 2, 1] using sum is: 5 6. Missing number in [7, 6, 4, 3, 2, 1] using XOR is: 5 |