【算法练习】找出数组中仅出现一次的数字

来源:互联网 发布:佶天鸿网络俱乐部 编辑:程序博客网 时间:2024/05/05 23:04


【题目】:给定一个整数数组,数组中除了一个整数仅出现一次外,其他数字都是出现两次,采用时间可空间复杂度尽量小的方法找出这个仅出现一次的整数。


【来源】微软校招题

   我最早知道这个题是在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;}




0 0