面试中遇到的一道算法题 财富值69

2016-10-13 08:01发布

有一堆数,其中有两个数出现了一次,其他的数都出现了两次。怎样将这两个只出现一次的数找出来?
排除打表,统计外有什么更为高效的方法。

付费偷看设置
发送
8条回答
田鼠 - 这个人很懒,什么都没留下
1楼 · 2016-10-13 08:30.采纳回答

result=0;
for(auot i : array)
result^=i;

时间复杂度 O(n)
空间复杂度 O(1)

剑指offer上的一题,用三次异或操作。

1先把所有数字 做 异或操作 得到数字 S
2 从高到低位检查 S 的 bit 找到第一个 1
3 检查所有数字 根据 这个bit位是1 还是 0 把 原来的数组划分为 两个
4 对每个数组 ,把数组内的数字做 异或操作。分别得到数字 A ,B
5 数字 A ,B 即为所求

使用位运算^。

应该可以用桶排序

PS:平时没事可以做做 leetcode,我的题解 repo https://github.com/hanzichi/l...

参考我的文章 http://www.cnblogs.com/zichi/... 第三小节

一周热门 更多>