面試題40(數組中出現一次的數字)

#include <iostream>

using namespace std;
const int maxn = 100;
int a[maxn];
void findNumberAppearOnce(int* data, int length, int* num1, int*num2)
{
    if(data == NULL || length<2) return;
    int resultExclusiveOR = 0;
    for(int i=0;i<length;i++)
        resultExclusiveOR^=data[i];
    int firstBit = resultExclusiveOR&(-resultExclusiveOR);//劃分子數組的依據
    *num1 = 0;*num2=0;
    for(int i=0;i<length;i++)
    {
        if((data[i]&firstBit)==0)
            *num1^=data[i];
        else
            *num2^=data[i];
    }
}
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    int x,y;
    findNumberAppearOnce(a,n,&x,&y);
    cout<<x<<" "<<y<<endl;
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章