一個整型數組裏除了兩個數字以外,其餘的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。java
相同的數異或爲0,數字與0異或爲其自己。
若是數組中只出現一次的數字僅一個,將數組的全部元素異或就能夠獲得單獨的那個數字。
題目中特意提到只出現一次的數字有兩個,因此須要先將數組拆分紅兩個,每一個子數組裏分配一個出現了一次的數字,而後分別異或即爲答案:數組
時間複雜度O(n),空間複雜度O(1)。code
//num1,num2分別爲長度爲1的數組。傳出參數 //將num1[0],num2[0]設置爲返回結果 public class Solution { public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) { if(array == null || array.length < 2) return ; int tmp = array[0]; for(int i = 1; i < array.length; i++) { tmp ^= array[i]; } int flag = 1; while((flag & tmp) == 0) { flag <<= 1; } num1[0] = 0; num2[0] = 0; for(int i = 0; i < array.length; i++) { if((flag & array[i]) == 0) { num1[0] ^= array[i]; } else { num2[0] ^= array[i]; } } } }