20170515_使用异或运算求出孤独数
思想:
两个相同的数异或结果为0,不同为1 ,根据该规则下列过程如下
两个相同的数异或结果为0,不同为1 ,根据该规则下列过程如下
假设 数组为 2,3,2,3,4,1,4
那么结果应该为1
2^3=0000 0010 ^ 0000 0011 = 0000 0001 1
1^2=0000 0001 ^ 0000 0010 = 0000 0011 3
3^3=0000 0011 ^ 0000 0011 = 0000 0000 0
0^4=0000 0000 ^ 0000 0100 = 0000 0100 4
4 ^ 1 =0000 0100 ^ 0000 0001 = 0000 0101 5
5 ^ 4= 0000 0101 ^ 0000 0100 =0000 0001 1
整个过程如上,最后结果为1。
代码:
//136. Single Number
//Given an array of integers, every element appears twice except for one.
//Find that single one.
//Note:
//Your algorithm should have a linear runtime complexity.
//Could you implement it without using extra memory?
#include<iostream>
#include<vector>
using namespace std;
void Outdata(vector<int> &a)
{
auto beg=a.begin();
for(; beg!=--a.end(); ++beg)
cout<<*beg<<",";
cout<<*beg<<endl;
}
class Solution
{
public:
int singleNumber(vector<int> &nums)
{
int result=0;
for(auto n:nums)
result=result^n;
return result;
}
};
int main()
{
vector<int> a;
int ch;
cout<<"依次输入数据:"<<endl;
while(cin>>ch)
a.push_back(ch);
cout<<"输入的数据是:"<<endl;
Outdata(a);
Solution example;
int result;
result=example.singleNumber(a);
cout<<"查找到的那个孤单数:"<<result<<endl<<endl;
system("pause");
return 0;
}