【算法練習】找出數組中僅出現一次的數字


【題目】:給定一個整數數組,數組中除了一個整數僅出現一次外,其他數字都是出現兩次,採用時間可空間複雜度儘量小的方法找出這個僅出現一次的整數。


【來源】微軟校招題

   我最早知道這個題是在C語言的位操作學習過程中,這道題目是考察的對C或者C++位操作的應用--異或操作符 “^”,兩個相同的整數(在計算機內表示是補碼)進行異或操作,結果爲0,數字0與任何整數異或操作,結果還是那個整數,利用這個性質,將數組中的整數異或操作,最終所有相同的數字都被異或操作結果爲0,0與僅出現一次的數字異或,得到的還是那個數字。可以找到要求的數字。


【源代碼】:

//******************************************************
//     date       : 2014-03-31
//     author     : zhangxiaoya
//     university : BIT
//******************************************************

/**********************************************************
                        Instruction
    輸入一個整數數組,數組中除了一個整數僅出現一次外,
    其他整數都出現兩次,給出一種時間和空間複雜度最小的
    方法找出這個只出現一次的整數
***********************************************************/
#include <iostream>

using namespace std;

int main()
{
    int n,t,r;
    while(cin>>n)
    {
        r =0;
        while(n--)
        {
            cin>>t;
            r ^=t;
        }
        cout<<r<<endl;
    }
    return 0;
}





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