package com.interview.books.lintcode; import java.util.ArrayList; import java.util.List; /** * Created_By: stefanie * Date: 15-1-24 * Time: 下午8:38 */ public class LIT1_SingleNumberIII { //assume number is A and B, first find the xor of A and B, xor should at least have one bit is 1, //find the bit, it is the differentiation of A nd B. //1. number != 0 and number >>> 1 as the condition to find the lowest 1, for negative numbers. public List<Integer> singleNumberIII(int[] A) { List<Integer> numbers = new ArrayList(); int xor = 0; for(int i = 0; i < A.length; i++) xor ^= A[i]; //find the lowest 1 in the xor int number = xor; int k = 0; while(number != 0){ if((number & 1) != 0) break; number = number >>> 1; k++; } int num1 = 0; int mask = 1 << k; for(int i = 0; i < A.length; i++){ if((A[i] & mask) == 0) num1 ^= A[i]; } numbers.add(num1); numbers.add(xor ^ num1); return numbers; } }