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


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


【来源】微软校招题

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


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值