看到這個題目的時候,第一反應是想辦法建設一個映射,把每個數字與出現的次數count結合起來,每出現一次進行count+1,最后遍歷出count不是偶數的那個數就是所求數。
但剛有這個想法便覺得這個實現起來有點復雜了,有沒有更簡單的方法,然后就想到了排序,直接用 sort( ) 進行排序,兩個數兩個數的來讀,判斷所讀的兩個數是否相等,相等則繼續下一組,不相等則這個數就是所求數
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[]={4,3,5,6,8,7,9,1,11,3,4,5,6,7,8,9,1}; int n=sizeof(arr)/sizeof(arr[0]); int i; sort(arr,arr+n); for(i=0;i<n;i+=2) { if(arr[i]!=arr[i+1]) { cout<<arr[i]<<endl; break; } }
return 0; }
后來上網看,又看到了一個更簡單的方法,直接用異或運算符來進行計算,相同的數字異或為0,0異或任何數都等於任何數,且異或的位置可以進行交換而不影響結果,
如:3^4^5^3^5=3^3^5^5^4 =4。
#include<iostream>
using namespace std;
int main()
{
int arr[]={4,3,5,6,8,7,9,1,123,3,4,5,6,7,8,9,1};
int n=sizeof(arr)/sizeof(arr[0]);
int a=arr[0];
while(--n)
a^=arr[n];
cout<<a<<endl;
return0;
}
阿西吧!
