package com.interview.bits; /** * http://www.geeksforgeeks.org/find-the-number-occurring-odd-number-of-times/ * http://www.geeksforgeeks.org/find-two-non-repeating-elements-in-an-array-of-repeating-elements/ */ public class NumberOccuringOddTimes { public int oneNumberOccuringOddTimes(int arr[]){ int r = 0; for(int i=0; i < arr.length; i++){ r = r^arr[i]; } return r; } class Pair{ int a; int b; } public Pair twoNumbersOccuringOddTimes(int arr[]){ int r = 0; for(int i=0; i < arr.length; i++){ r = r^arr[i]; } r = r & ~(r-1); int r1 = 0; int r2 = 0; for(int i=0; i < arr.length; i++){ if((r&arr[i]) == 0){ r1 = r1^arr[i]; }else{ r2 = r2^arr[i]; } } Pair p = new Pair(); p.a = r1; p.b = r2; return p; } public static void main(String args[]){ NumberOccuringOddTimes noot = new NumberOccuringOddTimes(); int arr[] = {1,2,9,9,2,1,9,7,2,1,9,1}; Pair p = noot.twoNumbersOccuringOddTimes(arr); System.out.print(p.a + " " + p.b); } }