我們知道N^ N=0;假設數組中A和B只出現一次,那麼數組異或之和sum=A^B。轉換成二進制,A與B肯定在某一位不同,一個爲0,一個爲1,我們以這一位來劃分數組爲0派和1派,0派和1派的異或和分別爲A和B。
//num1,num2分別爲長度爲1的數組。傳出參數
//將num1[0],num2[0]設置爲返回結果
public class Solution {
public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
int l=array.length;
int sum=0;
for(int i=0;i<l;i++){
sum^=array[i];
}
int m=1;
while((m&sum)==0){
m=m<<1;
}
for(int i=0;i<l;i++){
if((array[i]&m)!=0){
num1[0]^=array[i];
}
else{
num2[0]^=array[i];
}
}
}
}