package com.interview.bits; class Pair{ int x; int y; } /** * http://www.geeksforgeeks.org/find-the-two-repeating-elements-in-a-given-array/ * http://www.geeksforgeeks.org/find-a-repeating-and-a-missing-number/ */ public class MissingNumbers { public Pair findMissingAndRepeated(int arr[], int n){ int xor = 0; for(int i=0; i < arr.length; i++){ xor = xor ^ arr[i]; } for(int i=1; i <= n; i++){ xor = xor ^ i; } xor = xor & ~(xor-1); int set1 = 0; int set2 = 0; for(int i=0; i < arr.length; i++){ if((arr[i] & xor) > 0){ set1 ^= arr[i]; }else{ set2 ^= arr[i]; } } Pair p = new Pair(); for(int i=1; i <= n; i++){ if((i & xor) > 0){ set1 ^= i; }else{ set2 ^= i; } } p.x = set1; p.y = set2; return p; } public Pair findTwoMissingNumber(int arr[], int n){ int xor = 0; for(int i=0; i < arr.length; i++){ xor = xor ^ arr[i]; } for(int i=1; i <= n; i++){ xor = xor ^ i; } xor = xor & ~(xor-1); int set1 = 0; int set2 = 0; for(int i=0; i < arr.length; i++){ if((arr[i] & xor) > 0){ set1 ^= arr[i]; }else{ set2 ^= arr[i]; } } Pair p = new Pair(); for(int i=1; i <= n; i++){ if((i & xor) > 0){ set1 ^= i; }else{ set2 ^= i; } } p.x = set1; p.y = set2; return p; } public static void main(String args[]){ MissingNumbers mn = new MissingNumbers(); int arr[] = {1,2,3,5,5}; Pair p = mn.findMissingAndRepeated(arr, 5); System.out.println(p.x + " " + p.y); int arr1[] = {1,5,3,6}; p = mn.findMissingAndRepeated(arr1, 6); System.out.println(p.x + " " + p.y); } }