一个面试题给出的启示

前段时间看到的一个前端逻辑题

现在有100亿个数字大小为1到10亿的数字,在这100亿个数字里边只有一个数字出现的次数是奇数次的,你用什么方法,找出这个数字呢?

刚开始的思路是参考《编程珠玑》里面的bitmap方法,但是创建一个10亿的bitmap需要大概4G的内存,如果是32为机器,根本不可能完成,后来看到了一个很简单但是又意想不到的方法:

使用“位操作”的异或操作

1、让所有数字和0做异或运算还是数据本省
2、偶数次的数字做异或运算得到是0.a^b^b = a

 

posted @ 2016-04-26 21:38  风信子578  阅读(255)  评论(0编辑  收藏  举报