【題目】:給定一個整數數組,數組中除了一個整數僅出現一次外,其他數字都是出現兩次,採用時間可空間複雜度儘量小的方法找出這個僅出現一次的整數。
【來源】微軟校招題
我最早知道這個題是在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;
}