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


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


【来源】微软校招题

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





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