數組中只出現一次的數字

我們知道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];
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章